同时对两个JTable进行排序

时间:2011-10-21 01:05:07

标签: swing sorting jtable

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

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

3 个答案:

答案 0 :(得分: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);

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

修改

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

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

答案 1 :(得分:1)

我认为用户界面只会使问题复杂化。根据基础表数据来考虑它,你会更好。如果你能做到这一点,那就很简单了。

对一组值进行排序并不困难。您可以使用java.util.CollectionsComparable来执行此操作。

诀窍是维护已排序列的索引与行中其余列之间的关联。

答案 2 :(得分:0)

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

以下主题显示了如何在JXTable中实现它:

http://www.java.net/node/680987