Pergunta

Quando eu selecionar uma linha em uma JTable, meu JTable não fica mais atualizado. Quando eu não selecionar uma linha, o código abaixo funciona como esperado. A linha é adicionada ao JTable.

    @Override
public void update (Observable arg0, Object arg1)
{
    if (arg0 instanceof Logger)
    {
        LogItem last = systemController.logController.getLog().getLastLogItem();
        this.history.add(last);
        this.logTableModel.addItem(last);

        this.logTable.tableChanged(new TableModelEvent(this.logTableModel));
        ((DefaultTableModel)this.logTable.getModel()).fireTableStructureChanged();
        this.logTable.repaint();
        this.logTable.doLayout();
    }

}

Quando eu fechar a janela e reabri-lo, eu posso ver a nova linha.

Alguém pode me explicar por que, após selecionar uma linha, eu não vejo nenhuma atualização na JTable mais?

Foi útil?

Solução

É o update () acontecer chamada no segmento de eventos Swing? Se não o código terá de ser envolvido com algo como:

SwingUtilities.invokeLater(new Runnable() { public void run() {
  logTableModel.addItem(last);
}});

Outras dicas

Há uma série de problemas com o seu código. Você não deveria estar chamando fireTableStructureChanged como isto está relacionado com a estrutura da tabela (não de colunas, etc.) mudança não os próprios dados da tabela (adicionando uma linha, mudando um valor de célula etc). Além disso, você não precisa chamar repaint e doLayout na própria mesa como esta deve ser desencadeada por alterações do modelo.

Eu acho que você deve ter um olhar para como usar tabelas do tutorial Java, especificamente olhar usando modelos de mesa, para ouvir as alterações de dados e disparando eventos de alteração de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top