JXTable прослушивает sort и сортирует аналогичную таблицу таким же образом

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

Вопрос

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

Это было полезно?

Решение

Вы могли бы определить класс-посредник, который ссылается на каждый JTable's 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);
        }
      }
    }
  }

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top