4

すべて同じ列(ただしデータが異なる)を持つJXTableがいくつかあります。いずれかの列のヘッダーの1つをクリックすると、データを並べ替えることができます。私が今欲しいのは、テーブルの1つのヘッダーをクリックすると、他のテーブルが同じようにソートされることです。

4

2 に答える 2

4

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);
        }
      }
    }
  }
于 2010-01-14T14:37:16.380 に答える
0

ユーザーから制御が奪われるため、これは行いません。ユーザーは、さまざまなデータを比較するために、テーブルをさまざまに並べ替えることができます。

代わりに、[表示]メニューに[並べ替え]オプションを追加してください。このオプションを変更すると、すべてのテーブルが並べ替えられますが、ユーザーが特定のテーブルを並べ替える必要がない限り、それらはそのままにしておきます。

于 2010-01-14T14:40:20.463 に答える