Problema renderização JTable

7 respostas
L

Olá pessoal,

Tenho um JTable que preciso atualizar a cada 10 segundos.
Quando está sendo renderizada a tabela dá uma piscada. :frowning:
Alguém sabe como posso evitar isso, ou seja, atualizar os dados sem essa oscilação na tabela?

Obrigada.

7 Respostas

mauricioadl

acho que nao tem como, ja que a tabela vai mudar a aparencia e ela precisa ser inteiramente redesenhada.

esse intervalo me parece muito curto, nao pode aumentar nao?

Q

em alguns aplicativos que utilizo jTable, sempre existe essa piscada quando vou atualizala.
por que voce tira os dados que estavam nela e os insere novamento usando Query ou algo do tipo.
por isso ela pisca, sao os dados sendo inseridos nela.

fernandopaiva

Realmente não tem jeito, eu tenho uma tela q possui 6 JPanel em grid com as JTables…Todos dao essa piscadinha q esta se referindo. Isso acontece pq a tabela é redesenhada, veja q até o scroll vai para o inicio.

t+ e boa sorte.

ViniGodoy

Como vc está atualizando esses dados?

Para evitar a piscada, você deveria atualizar somente as linhas que mudaram, e disparar o evento específico somente para essas linhas.

Se disparar um fireTableDataChanged ou o fireTableStructureChanged (o que ocorre se vc mudar o model) pisca mesmo.

fernandopaiva

ViniGodoy:
Como vc está atualizando esses dados?

Para evitar a piscada, você deveria atualizar somente as linhas que mudaram, e disparar o evento específico somente para essas linhas.

Se disparar um fireTableDataChanged ou o fireTableStructureChanged (o que ocorre se vc mudar o model) pisca mesmo.

Até eu me interessei por esse assunto, como fazer isso ? Eu uso fireTableDataChanged() e aparece essa piscada.

Na minha Thread faco assim.

public void executaTabelaClientes(){
List<Clientes> listaCliente = new ClientesDAO().getClientes();
MeuTableModel model = new MeuTableModel(listaCliente);
JTable tabela = new JTable();
tabela.setModel(model);
}


public void startTablesPrincipal(){
      new Thread(){
            public void run(){
                while(true){
                    executaTabelaClientes();
                    sleep(1000 * 30);
                }
            }
        }.start();
}

Como fazer pra parar de dar a piscadinha ??

obrigado

ViniGodoy

Dá trabalho. Você efetivamente tem que atualizar o que mudou no model, e usar apenas eventos do tipo fireTableRowUpdated ou fireTableCellUpdated.

L

Olá pessoal,

Consegui evitar as piscadinhas usando o setValue

model.setValueAt(newValue, linha, column).

Dá trabalho, mas por hora foi a solução que achei.

Vou tentar algo melhor, se eu conseguir eu posto a solução.

Obrigada pela ajuda de todos!

Abraços.

Criado 23 de janeiro de 2012
Ultima resposta 23 de jan. de 2012
Respostas 7
Participantes 5