题
当我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教程的,特别是看看使用的表款,监听数据的变化和射击数据变化事件。
不隶属于 StackOverflow