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

Java TableModel.fireTableCellUpdated(tableRowIndex,tableColumnIndex)未更新JTable中的单元格,java,swing,jtable,tablemodel,Java,Swing,Jtable,Tablemodel,我的代码中有一个JTable 每当行(基本上是单元格)中的任何特定列有更新时,我都会更新该单元格中相应的图标 所以我基本上遵循这些步骤 步骤1:我更新模型 我打电话来 tableModel.fireTableCellUpdated(tableRowIndex, tableColumnIndex); 这个很好用 但当我将列从表头的一个位置拖放到另一个位置时,问题就来了。无论何时对任何特定单元格进行更新,我都会按照前面提到的步骤进行操作 问题:我没有看到图标被绘制。但如果我把焦点放在

我的代码中有一个JTable

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

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

步骤1:我更新模型

我打电话来

       tableModel.fireTableCellUpdated(tableRowIndex, tableColumnIndex);
这个很好用

但当我将列从表头的一个位置拖放到另一个位置时,问题就来了。无论何时对任何特定单元格进行更新,我都会按照前面提到的步骤进行操作

问题:我没有看到图标被绘制。但如果我把焦点放在表中那一行的顶部,它就是在画图标

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

为了测试,我在问题场景中添加了这段代码

     examTable.repaint(examTable.getCellRect(examTableRowIndex, examTableColumnIndex, true));
这是正确地重新粉刷电池

但我想这不是正确的解决方案。我试着调试代码,但没有找到多少关于这个问题的信息

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

这是错误的。永远不要直接调用firXXX方法。这是TableModel在数据更改时调用相应事件的任务

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

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

可检查。重新绘制(…)

同样,您不需要在表上手动调用repaint

但当我将列从表头的一个位置拖放到另一个位置时,问题就来了


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

很抱歉,此说明没有提及任何内容,对于如何、在何处以及为什么创建任何视图都不重要,为了获得更好的帮助,请尽快发布一个SSCCE/MCVE,简短、可运行、可编译的JTable/XxxTableModel:-)感谢camickr的输入。