JXTableは、同様のテーブルを同じようにソートし、ソートするために聞きます

StackOverflow https://stackoverflow.com/questions/2064752

質問

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

役に立ちましたか?

解決

あなたは各JTableRowSorterを参照し、各ソーターと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);
        }
      }
    }
  }

他のヒント

S /彼はテーブルが異なるデータを比較するために、別々にソートしたいことがあります。

:。

私はそれがユーザから離れた制御がかかるため、ということはしないだろう

その代わり、あなたの[表示]メニューのオプション「並べ替え」を追加します。このオプションを変更すると、すべてのテーブルを並べ替えたが、その後、ユーザが特定のテーブルをソートしたいと考えていない限り、放っておいます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top