Boa Tarde Pessoal,
depois de 2 anos sem encher o saco de vcs, estou de voltar trazendo uma nova dor de kbça (pra mim O.o");
Bom eh o seguinte, estou criando uma aplicação de cadastros, esta mtooooooo basica por enquanto, esta td certinho com as compilações etc…
tenho uma tabela chamada CadastrosAlunos no oracle tbm, e a função do programa eh simplesmente INSERIR, ALTERAR e EXCLUIR dados do banco.
criei JTextFields que pegam os dados e incluem no banco, isso esta funcionando certinho tbm, as inclusões de dados.
E criei do lado direito um botão escrito LISTAR CADASTRADOS que pega os dados do banco e imprimi na JTABLE, a questão é que:
quando eu clico duas vzs nesse botão LISTAR, ele duplica as Linhas, as Colunas, e lógicamente DADOS, e vai incluindo infinitamente a cada clique que dou nesse botão…
se eu insiro uma informação nova e clico no LISTAR ele vai trazer essa nova informação, mas vai duplicar TUDO o que jah tinha. (isso soh acontece no JTable).
Agora o que eu gostaria de fazer, cujo não sei se é viavel, seria criar uma forma de apagar td conteudo do JTable, e Listar novamente, acredito que assim ele não duplicaria O.o"!!!
Fiz brutas pesquisas sobre como fazer isso, mas nada resolveu meu problema. até mesmo incluindo um metodo que pegasse as linhas como modelo.getRowCount() e depois dentro de um FOR modelo.removeRow();
Li alguns artigos inclusive do ViniGodoy dizendo para não usar o DefaultTableModel pq ele é mto ruim, mas tda as soluções que achei não falavam sobre conexão com banco de dados O.o, principalmente Oracle.
Segue abaixo todo o codigo:
Obs: Ainda não implementei Orientacao a objetos.
package dmrsistemas;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.*;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class CadastrosAlunos extends JFrame{
/*Criando os Componentes da Tela*/
//Dados relacionados com o banco de dados
static Connection conexao;
String comandosql;
//Criando Tabela para o banco
private JScrollPane scrollpane;
private JTable tabela;
private JLabel infosgerais = new JLabel("Informações Gerais");
private JLabel nome = new JLabel("Nome");
private JLabel CPF = new JLabel("CPF (somente numeros)");
private JLabel infosresidenciais = new JLabel("Informações Residenciais");
private JLabel endereco = new JLabel("Endereço");
private JLabel numero = new JLabel("Numero");
private JLabel bairro = new JLabel("Bairro");
private JLabel cidade = new JLabel("Cidade");
private JLabel infocontato = new JLabel("Informações de Contato");
private JLabel email = new JLabel("Email");
private JLabel telefone = new JLabel("Telefone");
private JTextField camponome = new JTextField(5);
private JTextField campoend = new JTextField(10);
private JTextField camponum = new JTextField(6);
private JTextField campobairro = new JTextField(10);
private JTextField campocidade = new JTextField(10);
private JTextField campoemail = new JTextField(10);
private JFormattedTextField campotelefone = new JFormattedTextField();
private JFormattedTextField cpf = new JFormattedTextField();
private JFormattedTextField datanasc = new JFormattedTextField();
private JButton botaoInserir = new JButton("Inserir");
private JButton botaoAlterar = new JButton("Alterar");
private JButton botaoExcluir = new JButton("Excluir");
private JButton botaoCancelar = new JButton("Cancelar");
private JButton botaoMostrarTab = new JButton("Listar Cadastrados");
//private static InterfaceCadastros INSTANCE = null;
//definindo o modelo da tabela
private DefaultTableModel modelo;
//Método que constrói a janela da agenda
//FUNCAO PRINCIPAL DA CLASSE - Chama metodo principal
public static void Cadastros(){
new CadastrosAlunos().InterfaceCadastros();
}
public void InterfaceCadastros(){
Textos();
Campos();
Botoes();
Tabela();
Organizador();
Janela();
}
public void Organizador(){
Container Painel = new Container();
this.getContentPane().add(Painel);
//Painel.setLayout(null);
Painel.add(infosgerais);
Painel.add(nome);
Painel.add(camponome);
Painel.add(cpf);
Painel.add(CPF);
Painel.add(infosresidenciais);
Painel.add(endereco);
Painel.add(campoend);
Painel.add(numero);
Painel.add(camponum);
Painel.add(bairro);
Painel.add(campobairro);
Painel.add(cidade);
Painel.add(campocidade);
Painel.add(infocontato);
Painel.add(email);
Painel.add(campoemail);
Painel.add(telefone);
Painel.add(campotelefone);
Painel.add(botaoInserir);
Painel.add(botaoAlterar);
Painel.add(botaoExcluir);
Painel.add(botaoCancelar);
Painel.add(botaoMostrarTab);
Painel.add(scrollpane);
}
public void Campos(){
camponome.setVisible(true);
camponome.setBounds(5, 55, 250, 20);//Horizontal, Vertical, Largura, Altura
cpf.setVisible(true);
cpf.setBounds(5, 110, 150, 20);//Horizontal, Vertical, Largura, Altura
campoend.setVisible(true);
campoend.setBounds(5, 210, 250, 20);//Horizontal, Vertical, Largura, Altura
camponum.setVisible(true);
camponum.setBounds(265, 210, 50, 20);//Horizontal, Vertical, Largura, Altura
campobairro.setVisible(true);
campobairro.setBounds(325, 210, 100, 20);//Horizontal, Vertical, Largura, Altura
campocidade.setVisible(true);
campocidade.setBounds(435, 210, 100, 20);//Horizontal, Vertical, Largura, Altura
campoemail.setVisible(true);
campoemail.setBounds(435, 55, 250, 20);
campotelefone.setVisible(true);
campotelefone.setBounds(435, 110, 150, 20);//Horizontal, Vertical, Largura, Altura
}
public void Textos(){
infosgerais.setVisible(true);
infosgerais.setBounds(5, 5, 120, 20);//Horizontal, Vertical, Largura, Altura
infosgerais.setForeground(Color.black);
infosgerais.setFont(new Font("Arial", Font. BOLD, 12));
nome.setVisible(true);
nome.setBounds(5, 32, 100, 20);//Horizontal, Vertical, Largura, Altura
nome.setForeground(Color.black);
nome.setFont(new Font("Arial", Font. ITALIC, 13));
CPF.setVisible(true);
CPF.setBounds(5, 85, 150, 20);//Horizontal, Vertical, Largura, Altura
CPF.setForeground(Color.black);
CPF.setFont(new Font("Arial", Font. ITALIC, 13));
infosresidenciais.setVisible(true);
infosresidenciais.setBounds(5, 160, 150, 20);//Horizontal, Vertical, Largura, Altura
infosresidenciais.setForeground(Color.black);
infosresidenciais.setFont(new Font("Arial", Font. BOLD, 12));
endereco.setVisible(true);
endereco.setBounds(5, 185, 150, 20);//Horizontal, Vertical, Largura, Altura
endereco.setForeground(Color.black);
endereco.setFont(new Font("Arial", Font. ITALIC, 13));
numero.setVisible(true);
numero.setBounds(265, 185, 80, 20);//Horizontal, Vertical, Largura, Altura
numero.setForeground(Color.black);
numero.setFont(new Font("Arial", Font. ITALIC, 13));
bairro.setVisible(true);
bairro.setBounds(325, 185, 80, 20);//Horizontal, Vertical, Largura, Altura
bairro.setForeground(Color.black);
bairro.setFont(new Font("Arial", Font. ITALIC, 13));
cidade.setVisible(true);
cidade.setBounds(435, 185, 800, 20);//Horizontal, Vertical, Largura, Altura
cidade.setForeground(Color.black);
cidade.setFont(new Font("Arial", Font. ITALIC, 13));
infocontato.setVisible(true);
infocontato.setBounds(435, 5, 150, 20);//Horizontal, Vertical, Largura, Altura
infocontato.setForeground(Color.black);
infocontato.setFont(new Font("Arial", Font. BOLD, 12));
email.setVisible(true);
email.setBounds(435, 32, 100, 20);//Horizontal, Vertical, Largura, Altura
email.setForeground(Color.black);
email.setFont(new Font("Arial", Font. ITALIC, 13));
telefone.setVisible(true);
telefone.setBounds(435, 85, 80, 20);//Horizontal, Vertical, Largura, Altura
telefone.setForeground(Color.black);
telefone.setFont(new Font("Arial", Font. ITALIC, 13));
}
public void Botoes(){
//define posicionamento do botão na janela
botaoInserir.setBounds(6, 245, 90, 30);//Horizontal, Vertical, Largura, Altura
botaoInserir.setHorizontalTextPosition(SwingConstants.CENTER);
botaoInserir.setVerticalAlignment(SwingConstants.TOP);
botaoInserir.setVerticalTextPosition(SwingConstants.BOTTOM);
//buttonInserir.setIcon(new ImageIcon(getClass().getResource("imagens/NOVO.png")));
//Adiciona Acão para o Botão
botaoInserir.addActionListener(new MontaAcaoBotao());
//define posicionamento do botão na janela
botaoAlterar.setBounds(97, 245, 90, 30);//Horizontal, Vertical, Largura, Altura
botaoAlterar.setHorizontalTextPosition(SwingConstants.CENTER);
botaoAlterar.setVerticalAlignment(SwingConstants.TOP);
botaoAlterar.setVerticalTextPosition(SwingConstants.BOTTOM);
//buttonAlterar.setIcon(new ImageIcon(getClass().getResource("imagens/ALTERAR.png")));
//Adiciona Ação para o Botão
botaoAlterar.addActionListener(new MontaAcaoBotao());
//define posicionamento do botão na janela
botaoExcluir.setBounds(188, 245, 90, 30);//Horizontal, Vertical, Largura, Altura
botaoExcluir.setHorizontalTextPosition(SwingConstants.CENTER);
botaoExcluir.setVerticalAlignment(SwingConstants.TOP);
botaoExcluir.setVerticalTextPosition(SwingConstants.BOTTOM);
//buttonExcluir.setIcon(new ImageIcon(getClass().getResource("imagens/REMOVER.png")));
//Adiciona Ação para o Botão
botaoExcluir.addActionListener(new MontaAcaoBotao());
//define posicionamento do botão na janela
botaoCancelar.setBounds(283, 245, 90, 30);//Horizontal, Vertical, Largura, Altura
botaoCancelar.setHorizontalTextPosition(SwingConstants.CENTER);
botaoCancelar.setVerticalAlignment(SwingConstants.TOP);
botaoCancelar.setVerticalTextPosition(SwingConstants.BOTTOM);
//buttonCancelar.setIcon(new ImageIcon(getClass().getResource("imagens/FECHAR.png")));
//Adiciona Ação para o Botão
botaoCancelar.addActionListener(new MontaAcaoBotao());
botaoMostrarTab.setBounds(435, 245, 150, 30);
botaoMostrarTab.setHorizontalTextPosition(SwingConstants.CENTER);
botaoMostrarTab.setVerticalAlignment(SwingConstants.TOP);
botaoMostrarTab.setVerticalTextPosition(SwingConstants.BOTTOM);
botaoMostrarTab.addActionListener(new MontaAcaoBotao());
}
@SuppressWarnings("empty-statement")
public void Tabela(){
//Define o modelo da tabela
modelo = new DefaultTableModel();
//Montando a tabelinha
tabela = new JTable(modelo);
/* modelo.addColumn("Codigo");
modelo.addColumn("Nome");
modelo.addColumn("CPF");
modelo.addColumn("Telefone");
modelo.addColumn("E-mail");
modelo.addColumn("Endereço");
modelo.addColumn("Numero");
modelo.addColumn("Bairro");
modelo.addColumn("Cidade");
modelo.addColumn("Estado");*/
scrollpane = new JScrollPane(tabela);
scrollpane.setBounds(6, 290, 690, 350);//Horizontal, Vertical, Largura, Altura
}//Fecha metodo tabela
public void Janela(){
//DETALHE DA JANELA PRINCIPAL
this.setResizable(true);
this.setBounds(100, 110, 710, 680);//Horizontal, Vertical, Largura, Altura
this.setVisible(true);
this.setTitle("CADASTROS DE ALUNOS");
}
private class MontaAcaoBotao implements ActionListener {
@Override
public void actionPerformed(ActionEvent ACAO) {
String rnome, rcpf, rend, rbairro, rcidade, remail, rnumero, rtel;
/*
rnome = camponome.getText();
rcpf = cpf.getText();
rend = campoend.getText();
rbairro = campobairro.getText();
rcidade = campocidade.getText();
remail = campoemail.getText();
rnumero = camponum.getText();
rtel = campotelefone.getText();
*/
if(ACAO.getSource()==botaoInserir){
try{
//utilizando a classe ConexaoBanco (que abre o banco de dados com usuario e senha)
conexao = ConexaoBanco.getConnection();
//Cria objeto do tipo Statement stmt
Statement stmt;
//Para levar os comandos SQL
stmt = conexao.createStatement();
//Criando um ResultSet para receber respostas SQL
ResultSet rs1;
//Variavel comandosql recebe os comandos em SQL
comandosql="insert into CadastrosAlunos (nome, cpf, end, numero, bairro, cidade, email, tel) values ('"+ camponome.getText()+"', '"+cpf.getText()+"', '"+campoend.getText()+"','"+camponum.getText()+"','"+campobairro.getText()+"','"+campocidade.getText()+"','"+campoemail.getText()+"','"+campotelefone.getText()+"')";
//aqui o comando de inserção SQL é executado
stmt.executeUpdate(comandosql);
JOptionPane.showMessageDialog(null, "Dados gravados com sucesso!");
}catch (Exception e){
e.printStackTrace();
}
finally{
try{// bloco para tentativa de fechamento da conexão
if (conexao != null) {
conexao.close();
}//Fecha conexão com banco de dados
}
catch (Exception e){
e.printStackTrace();// caso de erro durante o fechamento da conexão
}
}//Fecha Finally
}//Fecha IF do botãoInserir
if(ACAO.getSource()==botaoMostrarTab){
try{
conexao = ConexaoBanco.getConnection();
Statement stmt;
stmt=conexao.createStatement();
ResultSet rs1;
rs1 = stmt.executeQuery("select * from CadastrosAlunos");
ResultSetMetaData rsMd = rs1.getMetaData();
int quantidadeColunas = rsMd.getColumnCount();
for(int i=1; i <= quantidadeColunas; i++){
modelo.addColumn(rsMd.getColumnLabel(i));
}
//MONTA A GRADE DA TABELA
Object[] fila = new Object[quantidadeColunas];
while(rs1.next()){
for(int i=0; i<quantidadeColunas; i++){
fila[i]=rs1.getObject(i+1);
}
modelo.addRow(fila);
}
rs1.close();
conexao.close();
}catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
}
}//Fecha void ACAO
}//Fecha Classe ActionListener
}//FECHA CLASSE PRINCIPAL
E esse método de limpar JTable, tinha que ser implementado antes de listar novamente as informações do banco, que é nesse código abaixo (referente a ação do botão LISTAR CADASTRADOS):
if(ACAO.getSource()==botaoMostrarTab){
try{
conexao = ConexaoBanco.getConnection();
Statement stmt;
stmt=conexao.createStatement();
ResultSet rs1;
rs1 = stmt.executeQuery("select * from CadastrosAlunos");
ResultSetMetaData rsMd = rs1.getMetaData();
int quantidadeColunas = rsMd.getColumnCount();
/*int x = modelo.getRowCount();
for (int a=0; a<x; a++){
modelo.removeRow(a);
}
for(int i=1; i <= quantidadeColunas; i++){
modelo.addColumn(rsMd.getColumnLabel(i));
}
//MONTA A GRADE DA TABELA
Object[] fila = new Object[quantidadeColunas];
while(rs1.next()){
for(int i=0; i<quantidadeColunas; i++){
fila[i]=rs1.getObject(i+1);
}
modelo.addRow(fila);
}
rs1.close();
conexao.close();
}catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
}
Agradeço qualquer ajuda!
Abraço!