当我JTable中选择一行,我JTable中没有得到了更新。 当我不选择行代码的下方按预期工作。行添加到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();
    }

}

当我关闭窗口,并重新打开它,我可以看到新的行。

有人能解释我为什么,选择行后,我没有看到JTable中的任何更新了?

有帮助吗?

解决方案

是最新的()调用在Swing事件线程发生了什么?如果不是代码将需要与类似包裹:

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

其他提示

有许多与你的代码的问题。你不应该调用fireTableStructureChanged,因为这是关系到表结构(没有列等)不改变表数据本身(添加行,更改单元格值等)。此外,你不应该需要调用重绘和上的doLayout表本身,因为这应该由模型的变化来触发。

我想你应该看看如何使用表从Java教程的,特别是看看使用的表款,监听数据的变化和射击数据变化事件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top