gpt4 book ai didi

java - 排序器更改行顺序后如何更新 JTableModel?

转载 作者:行者123 更新时间:2023-11-30 06:08:28 27 4
gpt4 key购买 nike

我已经实现了一个 JTable,我可以在其上使用 textField 搜索条目。

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

这行得通,但如果我通过单击任何列对表进行排序,它就没用了,因为排序似乎没有更新 DefaultTableModel

该表是一个更大项目的一部分,该项目极其复杂且充满依赖性,因此我无法发布一个小示例,但我认为这可以总结:

给定 DefaultTableModel A,其中包含关于 JTable B 的未排序数据,其中 B.setAutoCreateRowSorter()true ,如何在对 A 进行多次/任意排序后更新 B

我已阅读文档并对此进行了调查:

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

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

最佳答案

When a request is made, my code gets the DefaultTableModel, looks for the element in each column and row...

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

because the sorting doesn't seem to update the DefaultTableModel.

正确,只有 View (JTable) 被更新。

如果您想继续直接搜索 TableModel,那么您需要在每次调用 JTable 方法(即选择表格行)时将模型索引转换为 View 索引。这是通过使用以下 JTable 方法完成的:

int columnColumn = table.convertColumnIndexToView(modelColumn);
int row = table.convertRowIndexToView(modelRow);

还有一些方法可以将 View 值转换为模型值。

关于java - 排序器更改行顺序后如何更新 JTableModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39813464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com