Será que tem jeito?

Galera,

Tenho uma table, que recebe dados de um web service, portanto atualizo essa table numa thread de 5 em 5 segundos. Porém, quando é atualizada a table, DÁ UMA TREMIDA, o que eu não quero deixar que aconteca, pois imaginem uma pessoa que fica olhando para essa tela o dia todo!

Atualizo ela dessa maneira:

// Tabela SituacaoAgente
                SituacaoAgenteTableModel tableSituacaoAgente = new SituacaoAgenteTableModel();
                tableSituacaoAgente.fireTableDataChanged();              
                tableSituacaoAgente.mostraResultado(wsSituacaoAgente.getSituacaoAgente());
                jXTableSituacaoAgente.setModel(tableSituacaoAgente);

Teria como eu atualizar o componente com os dados, sem utilizar o método setModel?

Desde já muito obrigado!

Ao invés de trocar o table model periodicamente, porque você não faz com que a classe SituacaoAgenteTableModel disponibilize métodos para para inserção/alteração/remoção de registros? Dessa forma, você não precisaria trocar o table model da sua tabela por um novo SituacaoAgenteTableModel a cada cinco segundos, bastaria apenas você recuperar o table model da sua JTable, fazer o cast para SituacaoAgenteTableModel e adicionar/remover/alterar o(s) registro(s) apropriadamente.
Acha que é possível fazer isso no seu caso?

Err… não. O modelo precisa ser atualizado de uma vez só. Poderias minimizar o efeito tremedeira, trazendo um modelo menor ( com menos registros ).

Até!

Mas se não me engano, se na implementação de um método daqueles você invocar um fireTableBlablabla da vida, ele já atualiza a JTable, não?

No meu caso eu teria que atualizá-lo de uma vez só.

Tinha até tentado isso, mas não deu certo também não.

Tente procurar o código fonte da classe DefaultTableModel
Os métodos addRow fazem o que eu mencionei.

Se nada der certo, uma alternativa não muito elegante seria você colocar um JPanel na frente da tabela com uma mensagen tipo “atualizando dados. Aguarde…” que ficasse 1 ou 2 segundos na frente da JTable, pra dar o tempo dela ser carregada novamente… Muito pog isso será?

1 ou 2 segundos de wait para uma atualização de 5 segundos de passo? Talvez não seja legal.

Até!

[quote=maquiavelbona]1 ou 2 segundos de wait para uma atualização de 5 segundos de passo? Talvez não seja legal.

Até![/quote]
Sabia que isso cheirava a POG… :lol:
Mas algo me diz que deve ter alguma solução que deve ser desenvolvida dentro do table model criado… BrunoLeonardo, dê uma olhada no código fonte da DefaultTableModel e veja se não consegue ter algum insight. Chegando em casa vou ver se tenho algum exemplinho e posto aqui.

Valeu mesmo! Vou tentando aqui! Até mais!!! :wink:

Você usa AbstractTableModel certo?
na hora de atualizar você já tentou com o
fireTableStructureChanged();?

Se você utilizar uma Thread separada do processo atual , talvez ajude a não tremer a tela. Pois se a tela treme quando vai atualizar e porque ela parou alguns milesimos ou segundos para conseguir processar o evento que você solicitou.

Como a Thread SwingWorker. Isso é apenas uma sugestão, espero que te ajude.

O setTableModel necessita do repaint logo depois, o que pode causar também a tremedeira (que eu acho que é).

Até!