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