如何在用户对JTable进行排序时跟踪行索引?
我有一个第一行空白的JTable。 现在,当我通过单击该列对基于列的表进行排序时,空行将位于底部。 如果我在空行中插入一些东西并进行排序,则相应地放置该行。 即使排序,我如何跟踪其行索引。 我需要访问该行,但如果用户进行排序,那么我将松开行索引,因为它不再是第一行。
假设您正在使用Java 6中添加的TableRowSorter
,我认为您需要查看的是RowSorter
类中的convertRowIndexToModel
和convertRowIndexToView
方法。 你会做类似的事情
table.getRowSorter().convertRowIndexToView(0)
从模型中找出哪个可见行索引实际上是行索引0。
编辑:正如Tulskiy在评论中指出的,如果没有为表分配行排序器,这可能会导致NullPointerException。 最好直接在JTable上使用这些方法,例如table.convertRowIndexToView(0)
JTable.convertRowIndexToView()
将根据模型中的索引返回视图中行的索引。 JTable.convertRowIndexToModel()
将执行相反的操作。
解决方案1
使用jTable1.convertRowIndexToModel(jTable1.getSelectedRow())
时存在一些问题,如果根据日期或时间对值进行排序,则会从convertRowIndexToView(0)
返回不正确的值,因此请使用convertRowIndexToModel(0)
。
解决方案2
这将在排序时从新模型中检索。
jTable1.getValueAt(jTable1.getSelectedRow(), 0);
即使在排序时,这也将根据原始索引检索值。
((DefaultTableModel)jTable1.getModel()).getValuAt(jTable1.getSelectedRow(), 0);