TableModel.fireTableCellUpdated(tableRowIndex,tableColumnIndex)未更新JTable中的单元格

时间:2014-08-21 10:29:36

标签: java swing jtable tablemodel

我的代码中有一个JTable。

每当对行中的任何特定列(基本上是单元格)进行更新时,我都会更新该单元格中的相应图标。

所以我基本上都遵循这些步骤。

第1步:我更新模型。

Step2 2:我正在打电话

       tableModel.fireTableCellUpdated(tableRowIndex, tableColumnIndex);

这很好用。

但是当我在Table标题中将列从一个位置拖放到另一个位置时会出现问题。 每当对任何特定单元格进行更新时,我都会按照之前提到的步骤进行操作。

问题:     我没有看到图标画。但是,如果我将焦点放在表格中的那一行之上,它就会画出图标。

观察:   我在拖动列后看到tableRowIndex和tableColumnIndex是正确的。

仅用于测试我在问题场景中添加了这段代码。

     examTable.repaint(examTable.getCellRect(examTableRowIndex, examTableColumnIndex, true));

这正在重新粉刷细胞。

但我认为这不是正确的解决方案。我试图调试我没有找到问题的代码

非常感谢任何帮助。

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

我正在调用tableModel.fireTableCellUpdated(tableRowIndex,tableColumnIndex);

那是错的。你永远不应该直接调用firXXX方法。这是TableModel在数据更改时调用适当事件的工作。

  

我将更新该单元格中的相应图标。

您需要做的就是调用model.setValueAt(...)方法来更改Icon,模型将通知表数据已更改,以便表可以重新绘制自己。

  

examTable.repaint(...)

同样,您不需要在表格上手动调用重绘

  

但是当我在Table标题中将列从一个位置拖放到另一个位置时会出现问题。

如果您遵循上述建议,不确定为什么需要特殊代码。但是,如果由于某种原因仍然需要,那么您需要查看convertColumnIndex...(...)方法以确保使用适当的列索引。