Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当用户对JTable进行排序时,如何跟踪行索引?_Java_Swing_Jtable - Fatal编程技术网

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

Java 当用户对JTable进行排序时,如何跟踪行索引?,java,swing,jtable,Java,Swing,Jtable,我有一个JTable,第一行是空白的。现在,当我通过单击列来排序基于列的表时,空白行位于底部。如果在空白行中插入某些内容并进行排序,则相应地放置行。即使在排序时,如何跟踪其行索引。我需要访问该行,但如果用户进行排序,那么我将丢失行索引,因为它不再是第一行 将根据视图中的行在模型中的索引返回该行的索引。相反。假设您正在使用Java 6中添加的TableRowSorter内容,我认为您需要查看RowSorter类中的convertRowIndexToModel和convertRowIndexToVi

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

将根据视图中的行在模型中的索引返回该行的索引。相反。

假设您正在使用Java 6中添加的
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,如果没有定义分拣机。。。我在内置排序和自定义表模型方面遇到了太多的麻烦,将来无法避免。