Será que tem jeito?

12 respostas
B

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!

12 Respostas

Mantu

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?

maquiavelbona

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é!

Mantu

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?

B

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.

Mantu

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

Mantu

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á?

maquiavelbona

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

Até!

Mantu

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

Até!


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.

B

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

Marky.Vasconcelos

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

H

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.

maquiavelbona

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

Até!

Criado 7 de agosto de 2007
Ultima resposta 7 de ago. de 2007
Respostas 12
Participantes 5