模型更改时自动更新jtable列

时间:2012-06-20 12:10:18

标签: java swing jtable abstracttablemodel

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

  • jTable.updateUI();是外观和感觉相关的方法,不要使用
  

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

  • you have to override right notifiers了解TableModel

  • 中的方法
  • 使用DefaultTableModel,API中已实现所有通知程序,

  • 所有更新必须在EventDispatchThread

  • 上完成

答案 2 :(得分:-1)

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

我之所以使用它,是因为我没有使用TableModel,但我只是在Object [] []中有数据,就像在sun(oracle)教程的第一个例子中那样

答案 3 :(得分:-1)

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

myJTable.createDefaultColumnsFromModel();

在我的情况下,它解决了更新问题,而:.repaint(),. invalidate(),. fireTableDataChanged()没有帮助。