Atualizar JTable

1 resposta
T

Olá pessoal sou novo no forum e estou comesando a estudar java, estou fazendo um sisteminha nele fiz um cadastro de clientes e os clientes cadastrados eu estou mostrando em JTable, só que não estou conseguindo atualiza ela quando eu insiro algum cadastro ow deleto, a tabela só é atualizada quando eu fecho o internalFrame e abro denovo dae ela aparece atualizada eu fiz a tabela desse jeito:

Fiz essa classe DbCLiente

import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
import java.sql.Connection;


public class DbCliente {
private Connection conn;	
private Statement stm;
private ResultSet res;


public static Vector carregatabela(Connection conn)throws Exception{
		String lista = "SELECT * FROM cad_cli; ";
		Vector clientes = new Vector();		
		Statement stm = (Statement) conn.createStatement() ;
		ResultSet res = stm.executeQuery(lista);
		
		while(res.next()){
			Vector cli = new Vector();
			cli.addElement(res.getString("id_cliente"));			
			cli.addElement(res.getString("nome_cliente"));
			cli.addElement(res.getString("endereco_cliente"));
			cli.addElement(res.getString("complemento_cliente"));
			cli.addElement(res.getString("cidade_cliente"));
			cli.addElement(res.getString("estado_cliente"));
			
			clientes.addElement(cli);
		}res.close();stm.close();
		
		return clientes;
	}
}

Essa é a classe do cadastro de Cliente só vo postar a parte da tabela se postar tudo vai ficar muito grande

private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
			jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
			jScrollPane.setPreferredSize(new Dimension(468, 150));
			jScrollPane.setViewportView(getJTable());
		}
		return jScrollPane;
	}
	/**
	 * This method initializes jTable	
	 * 	
	 * @return javax.swing.JTable	
	 */
	private JTable getJTable() {
		if (jTable == null) {
			jTable = new JTable();
			try{
				Vector v1 = DbCliente.carregatabela(conn); 											
				Vector v2 = new Vector();			
				v2.addElement("ID Cliente");
				v2.addElement("Nome");			
				v2.addElement("Endereço");
				v2.addElement("Complemento");
				v2.addElement("Cidade");
				v2.addElement("Estado");
				/*
				 * v1 = vetor de vetor, dados 
				 * v2 = colunas
				 */					
				jTable.setModel(new DefaultTableModel(v1, v2));				
				jTable.setRowHeight(14);
				jTable.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
				jTable.setShowGrid(true);				
					}catch (Exception e) {
						System.out.println(e.toString());
				}
		}
		return jTable;
	}

1 Resposta

R

Tiago, acho q a forma q vc está fazendo tornará mais lento para atualizar os dados, mas tente dar um

UpdateUI(); após carregar os dados novamente.
Mas eu prefiro trabalhar da seguinte forma:
Ao inves de ter um getJTable() tenho os metódos

DefaultTableModel tableModel = new DefaultTableModel();
jTable tabela = new JTable();
tabela.setModel(tableModel);
private Vector getTitulos() //retorna os titulos das colunas
private Vector getDados() //retorna os dados da tabela, aki vc chama sua classe que busca os dados no BD
private void atualizaTabela(){
tableModel.setDataVector(getDados, getTitulos);
}

Ae basta vc chamar o método atualizaTabela() após atualizar algum registro, ou deletar, ou adicionar …
Qualquer dúvida poste ae.

Criado 24 de março de 2008
Ultima resposta 24 de mar. de 2008
Respostas 1
Participantes 2