2

我有一个实现 TableModel 接口的类。当我在我的 jTable 上调用 setModel 并将我的类设置为模型然后调用jTable.updateUI();一切都很好。但在某些情况下,我想用不同的结构改变模型。显示数据仍然可以正常工作,但我的列没有更新。有没有办法强制我的表也刷新新模型的列?

4

4 回答 4

6

如果数据和结构都发生了变化,模型需要触发相应的事件,例如:fireTableStructureChanged。

http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#fire

于 2012-06-20T12:12:40.780 回答
4
  • jTable.updateUI();是 Look and Feel 相关的方法,不要使用那个

我有一个实现 TableModel 接口的类。

  • 您必须为来自的方法覆盖正确的通知器TableModel

  • 使用DefaultTableModel,API中实现了所有通知器,

  • 所有更新必须在EventDispatchThread

于 2012-06-20T12:16:14.357 回答
-1

如果你像我一样只是写一个小技巧,你可以考虑使用 .repaint() 方法,而不是 .updateUI() 方法。

我使用它是因为我不使用 TableModel,但我只是在 Object[][] 中有数据,就像在 sun (well oracle) 教程的第一个示例中一样

于 2013-01-23T08:42:13.910 回答
-1

试试这个(在 setModel(myTableModel); 行之后插入):

myJTable.createDefaultColumnsFromModel();

就我而言,它解决了更新问题,而:.repaint()、.invalidate()、.fireTableDataChanged() 没有帮助。

于 2014-01-22T19:08:00.757 回答