Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Java JXTable以相同的方式对类似的表进行排序_Java_Swing_Sorting_Swingx_Jxtable - Fatal编程技术网

Java JXTable以相同的方式对类似的表进行排序

Java JXTable以相同的方式对类似的表进行排序,java,swing,sorting,swingx,jxtable,Java,Swing,Sorting,Swingx,Jxtable,我有许多jxtable,它们都有相同的列(但数据不同)。您可以通过单击其中一列的标题对数据进行排序。我现在想要的是,当单击其中一个表的标题时,其他表以相同的方式进行排序。您可以定义一个中介类,该类引用每个JTable的RowSorter,并将自身注册为每个排序器的RowSorterListener。当给定的分拣机发生更改时,您可以使用getSortKets()检索其当前的分拣键列表,并使用setSortKeys(list我不会这样做,因为这会剥夺用户的控制权:用户可能希望以不同的方式对表进行排序

我有许多jxtable,它们都有相同的列(但数据不同)。您可以通过单击其中一列的标题对数据进行排序。我现在想要的是,当单击其中一个表的标题时,其他表以相同的方式进行排序。

您可以定义一个中介类,该类引用每个
JTable
RowSorter
,并将自身注册为每个排序器的
RowSorterListener
。当给定的分拣机发生更改时,您可以使用
getSortKets()
检索其当前的分拣键列表,并使用
setSortKeys(list我不会这样做,因为这会剥夺用户的控制权:用户可能希望以不同的方式对表进行排序,以比较不同的数据段


相反,在视图菜单中添加一个“排序依据”选项。更改此选项将对所有表进行排序,但如果用户不想对特定表进行排序,则不必对它们进行排序。

在某些情况下,以相同的方式对两个表进行排序很重要;例如,我在构建“差异”时使用了这种方法由左右JTable组成的视图,其中滚动条和排序顺序必须保持同步。当然,有时这很有用。但从用户体验的角度来看,大多数情况下这是一个非常糟糕的主意。它违反了“最小惊讶原则”问题是该表似乎没有任何行排序器。即使“sortManager”也是空的。但是,当我单击列标题时,排序工作正常。我想这是因为它是一个JXTable。我以为排序是由表处理的,但我现在不确定了。啊,对不起,我没有注意到它是JXTable。如果您使用的是JDK 1.6,我建议使用moving到JTable,这将为您提供更高性能的排序。
public class SortMediator implements RowSorterListener {
  private final List<RowSorter> sorters;
  private boolean changing;

  public void addRowSorter(RowSorter sorter) {
    this.sorters.add(sorter);
  }

  public void sorterChanged(RowSorterEvent e) {
    ...
  }
}
  public void sorterChanged(RowSorterEvent e) {
    // The changing flag prevents an infinite loop after responding to the inital
    // sort event.
    if (!changing) {
      changing = true;

      RowSorter changedSorter = e.getSource();
      List<? extends SortKey> keys = changedSorter.getKeys();

      for (RowSorter sorter : sorters) {
        if (sorter != changedSorter) {
          // Install new sort keys, which will cause the sorter to re-sort.
          // The changing flag will prevent the mediator from reacting to this.
          sorter.setSortKeys(keys);
        }
      }
    }
  }