编程语言
首页 > 编程语言> > java – JXTable以同样的方式监听类似表的排序和排序

java – JXTable以同样的方式监听类似表的排序和排序

作者:互联网

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

解决方法:

您可以定义一个引用每个JTable的RowSorter的中介类,并将自己注册为每个分拣机的RowSorterListener.当给定的分拣机更改时,您可以使用getSortKets()检索其当前的排序键列表,并使用setSortKeys(List<?extends SortKey>)将它们传递给每个其他分拣机.

首先我们定义中介类:

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) {
    ...
  }
}

现在我们实现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);
        }
      }
    }
  }

标签:java,sorting,swing,swingx,jxtable
来源: https://codeday.me/bug/20190627/1301012.html