Java 当用户对JTable进行排序时,如何跟踪行索引?
我有一个JTable,第一行是空白的。现在,当我通过单击列来排序基于列的表时,空白行位于底部。如果在空白行中插入某些内容并进行排序,则相应地放置行。即使在排序时,如何跟踪其行索引。我需要访问该行,但如果用户进行排序,那么我将丢失行索引,因为它不再是第一行 将根据视图中的行在模型中的索引返回该行的索引。相反。假设您正在使用Java 6中添加的Java 当用户对JTable进行排序时,如何跟踪行索引?,java,swing,jtable,Java,Swing,Jtable,我有一个JTable,第一行是空白的。现在,当我通过单击列来排序基于列的表时,空白行位于底部。如果在空白行中插入某些内容并进行排序,则相应地放置行。即使在排序时,如何跟踪其行索引。我需要访问该行,但如果用户进行排序,那么我将丢失行索引,因为它不再是第一行 将根据视图中的行在模型中的索引返回该行的索引。相反。假设您正在使用Java 6中添加的TableRowSorter内容,我认为您需要查看RowSorter类中的convertRowIndexToModel和convertRowIndexToVi
TableRowSorter
内容,我认为您需要查看RowSorter
类中的convertRowIndexToModel
和convertRowIndexToView
方法。你会这样做的
table.getRowSorter().convertRowIndexToView(0)
找出哪个可见行索引实际上是模型中的行索引0
编辑:正如Tulskiy在注释中指出的那样,如果没有为表分配行分类器,这可能会导致NullPointerException。最好直接在JTable上使用这些方法,例如表.convertRowIndexToView(0)
解决方案1
使用jTable1.convertRowIndexToModel(jTable1.getSelectedRow())
时会出现一些问题,如果您根据日期或时间对值进行排序,将从convertRowIndexToModel(0)
返回不正确的值,因此请使用convertRowIndexToModel(0)
解决方案2
这将在排序时从新模型中检索
jTable1.getValueAt(jTable1.getSelectedRow(), 0);
((DefaultTableModel)jTable1.getModel()).getValuAt(jTable1.getSelectedRow(), 0);
这将根据原始索引检索值,即使在排序时也是如此
jTable1.getValueAt(jTable1.getSelectedRow(), 0);
((DefaultTableModel)jTable1.getModel()).getValuAt(jTable1.getSelectedRow(), 0);
@克:没问题。我刚刚意识到我对方法的描述是错误的:)没关系……我只是做了table.getRowSorter().convertRowIndexToView(0),我的目的已经解决了……:)看起来就像tulskiy指出的那样,你可以直接调用table.convertRowIndexToView,它会将调用转发给rowSorter,但更方便。我不太熟悉这些API——我习惯于在Java6之前编写自定义排序。。。yech:pyour代码可能会给出一个NPE,如果没有定义分拣机。。。我在内置排序和自定义表模型方面遇到了太多的麻烦,将来无法避免。