如何在用户对JTable进行排序时跟踪行索引?

我有一个第一行空白的JTable。 现在,当我通过单击该列对基于列的表进行排序时,空行将位于底部。 如果我在空行中插入一些东西并进行排序,则相应地放置该行。 即使排序,我如何跟踪其行索引。 我需要访问该行,但如果用户进行排序,那么我将松开行索引,因为它不再是第一行。

假设您正在使用Java 6中添加的TableRowSorter ,我认为您需要查看的是RowSorter类中的convertRowIndexToModelconvertRowIndexToView方法。 你会做类似的事情

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);