如何在分拣机更改行顺序后更新JTableModel?

Mar*_*ens 2 java sorting swing jtable

我已经实现了一个JTable,我可以使用textField搜索条目.

当发出请求时,我的代码获取DefaultTableModel,查找每个列和行中的元素,然后将表中的选择设置为找到元素的行.

这是有效的,但是如果我通过点击任何列对表进行排序是没用的,因为排序似乎没有更新DefaultTableModel.

该表是一个更大项目的一部分,它非常复杂且充满了依赖性,所以我不能发布一个小例子,但我认为这将总结:

给定一个DefaultTableModel A完整的关于非排序的数据JTable B,这里B.setAutoCreateRowSorter()true,如何做一个更新B后的数/任何cloumn,分类法,A

我已经阅读了文档并且还研究了这个:

http://www.codejava.net/java-se/swing/6-techniques-for-sorting-jtable-you-should-know

除了挖了一下之外TableRowSorter#addRowSorterListener,它只能告诉我列已经排序,并没有真正有用.除非我当然使用该列来尝试对多维数组中的所有值进行排序,然后清除表,然后将所有值分配回来......但显然这对于​​我的情况来说非常慢而且不是真正的选项.

有关以下内容的信息,请参阅此处RowSorterEvent:

https://docs.oracle.com/javase/7/docs/api/javax/swing/event/RowSorterEvent.html

有人能指出我正确的方向吗?

cam*_*ckr 5

发出请求时,我的代码获取DefaultTableModel,查找每列中的元素和行...

所以不要搜索TableModel.您可以使用table.getValueAt(...)方法在表的每个行/列中搜索元素.将以表的当前排序顺序访问数据.

因为排序似乎没有更新DefaultTableModel.

正确,只更新View(JTable).

如果要继续直接搜索TableModel,则需要在需要调用JTable方法(即选择表行)时将模型索引转换为视图索引.这是通过使用以下JTable方法完成的:

int columnColumn = table.convertColumnIndexToView(modelColumn);
int row = table.convertRowIndexToView(modelRow);
Run Code Online (Sandbox Code Playgroud)

还有将视图值转换为模型值的方法.