当我在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中的任何更新了吗?
答案 0 :(得分:3)
您的代码存在许多问题。您不应该调用fireTableStructureChanged,因为这与表结构(没有列等)有关,而不是更改表数据本身(添加行,更改单元格值等)。此外,您不需要在表本身上调用repaint和doLayout,因为这应该由模型更改触发。
我认为您应该查看Java教程中的How to Use Tables,特别是使用表模型,监听数据更改和触发数据更改事件。
答案 1 :(得分:0)
在Swing事件线程中是否发生了update()调用?如果不是,代码将需要包含以下内容:
SwingUtilities.invokeLater(new Runnable() { public void run() {
logTableModel.addItem(last);
}});