JXTable прослушивает sort и сортирует аналогичную таблицу таким же образом
Вопрос
У меня есть несколько 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);
}
}
}
}
Другие советы
Я бы не стал этого делать, потому что это отнимает контроль у пользователя:возможно, он захочет, чтобы таблицы были отсортированы по-разному, чтобы сравнить разные фрагменты данных.
Вместо этого добавьте опцию "Сортировать по" в свое меню "Вид".Изменение этого параметра приведет к сортировке всех таблиц, но затем оставит их в покое, если только пользователь не захочет отсортировать определенную таблицу.