JXTable прослушивает сортировку и сортировку аналогичной таблицы таким же образом - PullRequest
4 голосов
/ 14 января 2010

У меня есть несколько JXTables, которые имеют одинаковые столбцы (но разные данные). Вы можете отсортировать данные, нажав на один заголовок одного из столбцов. Теперь я хочу, чтобы другие таблицы сортировались одинаково при нажатии на заголовок одной из таблиц.

Ответы [ 2 ]

4 голосов
/ 14 января 2010

Вы можете определить класс-посредник, который ссылается на каждый 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);
        }
      }
    }
  }
0 голосов
/ 14 января 2010

Я бы не стал этого делать, потому что это отнимает у пользователя контроль: он / она может захотеть отсортировать таблицы по-разному, чтобы сравнить разные фрагменты данных.

Вместо этого добавьте параметр «Сортировка по» в меню «Вид». Изменение этого параметра приведет к сортировке всех таблиц, но затем оставит их в покое, если пользователь не захочет отсортировать конкретную таблицу.

...