我的代码中有一个JTable。
每当对行中的任何特定列(基本上是单元格)进行更新时,我都会更新该单元格中的相应图标。
所以我基本上都遵循这些步骤。
第1步:我更新模型。
Step2 2:我正在打电话
tableModel.fireTableCellUpdated(tableRowIndex, tableColumnIndex);
这很好用。
但是当我在Table标题中将列从一个位置拖放到另一个位置时会出现问题。 每当对任何特定单元格进行更新时,我都会按照之前提到的步骤进行操作。
问题: 我没有看到图标画。但是,如果我将焦点放在表格中的那一行之上,它就会画出图标。
观察: 我在拖动列后看到tableRowIndex和tableColumnIndex是正确的。
仅用于测试我在问题场景中添加了这段代码。
examTable.repaint(examTable.getCellRect(examTableRowIndex, examTableColumnIndex, true));
这正在重新粉刷细胞。
但我认为这不是正确的解决方案。我试图调试我没有找到问题的代码
非常感谢任何帮助。
提前致谢。
答案 0 :(得分:1)
我正在调用tableModel.fireTableCellUpdated(tableRowIndex,tableColumnIndex);
那是错的。你永远不应该直接调用firXXX方法。这是TableModel在数据更改时调用适当事件的工作。
我将更新该单元格中的相应图标。
您需要做的就是调用model.setValueAt(...)方法来更改Icon,模型将通知表数据已更改,以便表可以重新绘制自己。
examTable.repaint(...)
同样,您不需要在表格上手动调用重绘
但是当我在Table标题中将列从一个位置拖放到另一个位置时会出现问题。
如果您遵循上述建议,不确定为什么需要特殊代码。但是,如果由于某种原因仍然需要,那么您需要查看convertColumnIndex...(...)
方法以确保使用适当的列索引。