Atualizar JTable no evento do botão

Pessoal

Eu tenho uma JTable comum, ja com os dados e após uma consulta no banco é criada uma tabela e novamente alterada gostaria de saber se tem como eu fazer a tabela atualizar sem precisa fechar e abrir o frame ??? E poderia dar um exeplo simples só da parte do evento do botão…

Valew

zopo,

Sua table foi montada a partir de um model ? Se sim, limpe o model ( algo como seuModel.rows.clear() ) e depois de montar o model novamente, disparar fireTableDataChanged()

Márcio

Desculpe mas acho que perguntei coisa errada…

Seguinte, a tabela é retornada de uma outra classe e colocada em um JScrollPane e nesta classe é criada primeiramente para a exibição do frame (ou seja em branco), quando a pessoa efetua a consulta é retornada a tabela com os resultados (também de outra classe) e adicionada novamente no ScrollPane ja criado, só que quando é adicionada ele não atualiza no InternalFrame para a exibição dos dados…

E é esse o problema…

Eu ja tentei utilizar o .dispose() e depois o .setVisible(false) e o .setVisible(true) mas não funcionam pois quando é para exibir novamente o frame ele não abre e não acontece nenhum erro !!!

Olá,
Você deve remover a JTable do container e adicionar a nova JTable.

Caso seja a mesma JTable com novos dados, basta dar um JTable.revalidate();

Espero ter ajudado!

Cara não rolou…

Ai esta o código…

[code]
import javax.swing.;
import java.awt.event.
;
import java.awt.*;

public class Consulta extends JInternalFrame{
Bd objeto=new Bd();
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
JInternalFrame frame_consulta;
JScrollPane tabela=new JScrollPane();
public Consulta(JDesktopPane desk){
Icon icone = new ImageIcon(“logo.gif”);
JLabel icon=new JLabel(icone);
frame_consulta = new JInternalFrame( “Consulta de Livros”, false, false, false, false );
desk.add( frame_consulta );

		Container consulta_container = frame_consulta.getContentPane();
		consulta_container.setLayout( new BorderLayout() );
		
		JPanel panel=new JPanel();
		panel.setLayout(new GridLayout(7,2));
		JPanel panel1=new JPanel();
		panel1.setLayout(new FlowLayout());
		
		JLabel nome_l=new JLabel("Nome: ");
		final JTextField nome_t=new JTextField(20);
		
		JLabel codigo_l=new JLabel("Código: ");
		final JTextField codigo_t=new JTextField(20);
		
		JLabel autor_l=new JLabel("Autor: ");
		final JTextField autor_t=new JTextField(20);
		
		JLabel ano_l=new JLabel("Ano: ");
		final JTextField ano_t=new JTextField(20);
		
		JLabel edicao_l=new JLabel("Edição: ");
		final JTextField edicao_t=new JTextField(20);
		
		JButton act_consulta=new JButton (">>> Consulta <<<");
		act_consulta.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e ){	
				act_consulta(nome_t.getText(), codigo_t.getText(), autor_t.getText(), ano_t.getText(), edicao_t.getText());
			}
		});
		JButton act_limpar=new JButton (">>> Limpar <<<");
		act_limpar.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e ){	
				nome_t.setText("");
				codigo_t.setText("");
				ano_t.setText("");
				edicao_t.setText("");
				autor_t.setText("");
				tabela=new JScrollPane();
			}
		});
		JButton act_consulta_fecha=new JButton (">>> Fechar <<<");
		act_consulta_fecha.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e ){	
				tabela=new JScrollPane();
				frame_consulta.dispose();
			}
		});
		
		panel.add(nome_l);
		panel.add(nome_t);
		panel.add(codigo_l);
		panel.add(codigo_t);
		panel.add(autor_l);
		panel.add(autor_t);
		panel.add(ano_l);
		panel.add(ano_t);
		panel.add(edicao_l);
		panel.add(edicao_t);
		
		panel.add(act_limpar);
		panel.add(act_consulta);
		panel.add(act_consulta_fecha);
		
		panel1.add(tabela);
		tabela.setPreferredSize(new java.awt.Dimension(600,250));
		consulta_container.add(panel, BorderLayout.NORTH);
		consulta_container.add(panel1, BorderLayout.CENTER);
		frame_consulta.pack();
		frame_consulta.setVisible(true);
}
public void act_consulta(String nome, String codigo, String autor, String ano, String edicao){
		//frame_consulta.dispose();
		objeto.openBD();
		tabela = new JScrollPane(objeto.criarTabela(nome, codigo, autor, ano, edicao));
		objeto.closeBD();
		tabela.setPreferredSize(new java.awt.Dimension(600,250));
		tabela.setAutoscrolls(true);
		tabela.revalidate();
		//frame_consulta.setVisible(true);
}
public static void main(JDesktopPane desk){
		Consulta con=new Consulta(desk);
		con.setVisible(true);
}

}[/code]

Véio eu acho que você criou essa tabela da maneira mais complicada. Tentar fazer o seguinte cria uma classe extends tableModel e seta o modelo dessa sua tabela com essa sua classe dai quando você quizer incluir ou excliur você
basta você fazer um objeto desse seu modelo e alterá-lo.

e pols como eu faço para actualizar apenas uma linha selecionada? Seguinte eu tenho um frame para alterar e quando eu clicar no botão sair da tela eu quero que atualize apenas a linha que foi selecionada anteriormente!

Você está utilizando um DefaultTableModel para a sua tabela ???
Se sim, é só realimentar o método table.setDataVector(Object[][], Object[]); com os novos dados e logo abaixo, repintar a tabela com o comando table.repaint();

Acredito que isto faça com que sua tabela trabalhe dinamicamente neste sentido.

Abraço!

a minha tabela foi criada no NetBeans
la ta assim:

tabelaPri = new javax.swing.JTable();

tabelaPri.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {

    },
    new String [] {
        "CODPRI", "DESPRI", "POSPRI", "RGCODUSU", "RGUSUARIO", "RGDATA", "RGEVENTO"

    }
));

tabelaPri.getTableHeader().setResizingAllowed(false);
tabelaPri.getTableHeader().setReorderingAllowed(false);

tabelaPri.setVerifyInputWhenFocusTarget(false);