Atualização de JTable

Salve pessoal,
estou com o seguinte problema…preciso atualizar os dados de um componente JTable ao click do mouse em um botão passando alguns parametros de filtro. o problema eh que a table não se atualiza. jah tentei atualizar o container…naum rola…jah tentei usar
c.paintComponents( c.getGraphics() );
e
c.print( c.getGraphics() );
e
c.printComponents( c.getGraphics() );
e nada…alguem pode me dar uma luz??? :shock:
Grato
Tiaguera

ve se ajuda essa ideia… e usei quando precisei.

Coloque todos os seus dados dentro de um Vector para criar a table. Quando precisar alterar/incluir/excluir alguma linha da tabela, faça isso no Vector e depois chame a função repaint() da sua table.

Espero ter ajudado.

Cara…ateh fiz isso soh que oq acontece eh o seguinte…eu tenho um construtor que chama uma função que monta um filtro e faz a chamada para uma outra função que faz uma consulta no banco, alimenta um Vector e cria um JTable. portanto toda vez que eu apertar o botão “Pesquisar” eu faço a chamada para a função que gera a table. intaum naum adianta eu repintar ela certo??? eu preciso na verdade dar um refresh no JFrame ( pelo menos eu acho ).
Se vc ou alguem tiver passado por isso e tiver uma solução eu agradeço desde jah!!!
Grato
Tiaguera :slight_smile:

acho que ai vc se engana…
o meu caso o processo era bem parecido…
eu tinha uma função chamada alimentaDados() que limpava o vetor e carregava ele novamente a cada alteração na base de dados.
Então… cada vez que eu incluia um registro, por exemplo, eu somente chamava a função alimentaDados() e em seguida dava um tb.repaint();

No seu caso a função poderia somente fazer o filtro que vc quer.

não custa tentar…

cara…fiz o q vc disse…criei uma função soh para atualizar os dados do vetor…e depois dei o repaint…porem…naum rolo…dah uma olhada no código…c o q vc me diz…
public void consultaNota() {
JPanel topPanel = new JPanel();
//limpo o container
c.removeAll();
try{
//panel do filtro
topPanel.setLayout(new GridLayout( 1, 10 ));
topPanel.add(lblDataIni);
topPanel.add(edtDataIni);
topPanel.add(lblDataFim);
topPanel.add(edtDataFim);
topPanel.add(btnPesq);

  c.add(topPanel, BorderLayout.NORTH);
  montaTabela(edtDataIni.getText(),edtDataFim.getText());
  btnPesq.addActionListener( new ActionListener(){
       public void actionPerformed( ActionEvent e ){			sDataIni = edtDataIni.getText();
sDataFim = edtDataFim.getText();
montaTabela(sDataIni, sDataFim);
       }
 }
 );

}catch( Exception e ){ System.out.print( e ); }

}
public void carregaDados(String sDtIni, String sDtFim){
String sQuery = " Select nf_num, to_char( nf_data, ‘dd/mm/yyyy’ ), “;
sQuery += " sum( (nfi_qtde * nfi_valor) )as tot, nf_nome_cli “;
sQuery += " from nf, nf_item where nf_id = nfi_nf_id “;
if ( sDtIni != null && sDtIni.compareTo(””) != 0 )
sQuery += " and to_char(nf_data , ‘dd/mm/yyyy’) >= '”+sDtIni+"’ “;
if ( sDtFim != null && sDtFim.compareTo(”") != 0 )
sQuery += " and to_char(nf_data , ‘dd/mm/yyyy’) <= ‘"+sDtFim+"’ ";
sQuery += " Group By nf_num, nf_data, nf_nome_cli Order By nf_data Desc ";

vCont.clear();
columnNames.clear();
Connecta();
try{
    stmt = dbConn.createStatement();
rs = stmt.executeQuery(sQuery);
while ( rs.next() ){
Vector vReg = new Vector();
vReg.add ( ""+rs.getObject(1)+"" );
vReg.add ( ""+rs.getObject(2)+"" );
vReg.add ( ""+IN.Format( rs.getString(3) )+"" );
vReg.add ( ""+rs.getObject(4)+"" );
vCont.add( vReg );
}
dbConn.close();
columnNames.add("Número");
            columnNames.add("Data");
columnNames.add("Valor Total");
columnNames.add("Cliente");

table = new JTable(vCont, columnNames);
}catch(Exception e){ System.out.println( e ); }

}
public void montaTabela(String sDtIni, String sDtFim){
try{
JPanel buttonPanel = new JPanel();
carregaDados(sDtIni, sDtFim);
table.repaint();
table.setPreferredScrollableViewportSize(new Dimension(700, 500));

e assim vai…o trecho está ai…o que que eu estou fazendo de errado??

tenta fazer o seguinte…
coloca o Vector como uma variavel global e dentro do teu While na função que alimenta ele vc só alimenta, sem dar um New toda vez.

teu programa deve ficar ± assim…

  1. um Vector como variavel global
  2. uma função que alimente esse Vector
  3. o teu JTable com base no Vector (na hora de criar vc terá que utilizar sua função)

certo cara…deu certo mais continuou na mesma…pelo seguinte…ele agora estah criando um table a cada vez qui eu clico…mais acho qui eh soh questão de remodelar…vouu fazer uns testes aqui e depois digo ci rolou…
guscoppi…valeu mesmo cara…to devendo essa…
[]´s
Tiaguera

Fala, galera…

Tem vários tópicos aqui no guj falando sobre TableModel, eu sugiro que vcs dêem uma olhada.

Uma das características legals de um table model é que ele pode avisar a tabela que tudo mudou, ou que apenas uma linha mudou, ou que uma linha foi adicionada ou que uma linha foi removida, e a tabela repinta apenas o necessário.

Além disso, vc pode definir um editor específico (com filtro, por exemplo) pra uma determinada coluna.

O tutorial do site da Sun, “How to Use Tables”, é um ótimo ponto de partida.

[]s!!