Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Swing 同时对两个jtable进行排序_Swing_Sorting_Jtable - Fatal编程技术网

Swing 同时对两个jtable进行排序

Swing 同时对两个jtable进行排序,swing,sorting,jtable,Swing,Sorting,Jtable,我有两个JTable,它们是用同一个TableModel类的不同对象构建的。当我单击表1中的一列进行排序时,要求另一个表2也应根据在JTTable 1中单击的同一列进行排序。是否有任何方法可以找到表1中使用的列或排序依据的列。使用它,是否有任何方法可以通过对表2的任何方法调用来调用同一列的排序 请提供您的建议或指向任何JavaAPI的指针。此外,如果有任何链接,有一个例子将是非常有帮助的。 -Paul.我认为用户界面只会使问题复杂化。从底层表数据的角度考虑一下,您的表现会更好。如果你能做到这一点

我有两个JTable,它们是用同一个TableModel类的不同对象构建的。当我单击表1中的一列进行排序时,要求另一个表2也应根据在JTTable 1中单击的同一列进行排序。是否有任何方法可以找到表1中使用的列或排序依据的列。使用它,是否有任何方法可以通过对表2的任何方法调用来调用同一列的排序

请提供您的建议或指向任何JavaAPI的指针。此外,如果有任何链接,有一个例子将是非常有帮助的。
-Paul.

我认为用户界面只会使问题复杂化。从底层表数据的角度考虑一下,您的表现会更好。如果你能做到这一点,那就是一个简单的展示问题

对一组值进行排序并不困难。您可以使用
java.util.Collections
Comparable
来实现这一点


诀窍是保持已排序列的索引与行中其他列之间的关联。

最简单的方法是对基础数据进行排序。或者可以实现一个sortlistener并将其添加到两个表中

以下线程显示了如何在JXTable中实现它:


方法是倾听表格分拣器的变化,并将第二张表格的分拣键设置为相同:

    RowSorterListener l = new RowSorterListener() {

        @Override
        public void sorterChanged(RowSorterEvent e) {
            if (RowSorterEvent.Type.SORT_ORDER_CHANGED == e.getType()) {
                RowSorter sorter = e.getSource();
                otherTable.getRowSorter().setSortKeys(sorter.getSortKeys());
            }
        }

    };
    table.getRowSorter().addRowSorterListener(l);
如果需要以两种方式保持同步,请将侦听器同时注册到这两种方式,并添加一些逻辑,以便在侦听器触发排序更改时不执行任何操作

编辑

在写了两次几乎相同的评论后(针对建议对模型进行排序的答案),决定将其添加到这里

  • 从技术上讲,排序可以由模型或视图领域负责。无论哪种方式,都有(过去激烈辩论过的)利弊。一旦完成,在ui-dev中的任何地方都要坚持这个决定
  • 不管怎样,保持模型和视图坐标系之间的索引映射都是挑战所在
  • Swing/X决定将其视为一种视图责任,将任何基于模型的自定义排序/同步塞进顶部都会与系统发生冲突

当然可以,但这不是Swing'ish方法-排序被认为是视图的责任(=本例中的表)。实现“技巧”并非小事:-)我不同意-如果逻辑复杂,Swing方式可能并不总是正确的答案。在这种情况下,我认为它应该在其他地方。如果技巧变得太难,那么就应该重新考虑。然后让我们同意不同意——不管怎样,可能是细微差别。我的看法是:如果在挥杆,尽可能长时间地挥杆。如果结果不合适,试试外面的东西。你似乎建议另一种方法?是的,我的立场是,如果疼痛,不要这样做。如果它很复杂,也许你应该考虑用另一种方式来做。好的。在这种情况下,这并没有什么坏处——OP根本不知道如何操作,他/她无论如何都必须学习ui方式(或者不做ui开发;-)“最简单”是相对的:-)很好的链接挖掘,但有点过时——从1.6开始,SwingX使用核心排序/过滤机制