同时对两个JTable进行排序

pau*_*son 6 sorting swing jtable

我有两个使用相同TableModel类的不同对象构建的JTable.当我单击表1中的一列进行排序时,要求是另一个表2也应该根据JTable 1中单击的相同列进行排序.有没有办法找到表1中使用的列或者排序是基于.使用它,是否有任何方法可以通过表2中针对同一列的任何方法调用来调用排序.

请提供您对任何java apis的建议或指示.此外,如果有任何链接有一个例子将有很大的帮助. - 保罗.

kle*_*tra 8

要做的就是监听表的分类器的更改并将第二个表的sortKeys设置为相同:

    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);
Run Code Online (Sandbox Code Playgroud)

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

编辑

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

  • 从技术上讲,排序可以决定是模型或视图领域的责任.无论如何都有(在过去强烈争论中)利弊.完成后,在ui dev中随处可见
  • 无论哪种方式,保持模型和视图坐标系之间的索引映射都是挑战隐藏的地方
  • Swing/X决定将其视为一种视图责任,在顶部填充任何基于模型的自定义排序/同步都是在与系统作斗争