Сортировка двух таблиц JT одновременно - PullRequest
6 голосов
/ 21 октября 2011

У меня есть две JTables, созданные с разными объектами одного и того же класса TableModel. Когда я щелкаю по одному столбцу в Таблице 1 для сортировки, требуется, чтобы другая Таблица 2 также сортировалась на основе того же столбца, по которому щелкнули в JTable 1. Есть ли способ узнать, какой столбец в Таблице 1 использовался или сортировка была основана на. Используя это, есть ли способ вызвать сортировку с помощью любого вызова метода в таблице 2 для того же столбца.

Пожалуйста, предоставьте ваши предложения или указатели на любой Java-API. Кроме того, если есть какая-либо ссылка с примером, будет очень полезно. -Поль.

Ответы [ 3 ]

8 голосов
/ 21 октября 2011

Способ состоит в том, чтобы прослушать изменения сортировщика таблицы и установить одинаковые значения для sortKeys второй таблицы:

    RowSorterListener l = new RowSorterListener() {

        @Override
        public void sorterChanged(RowSorterEvent e) {
            if (RowSorterEvent.Type.SORT_ORDER_CHANGED == e.getType()) {
                RowSorter sorter = e.getSource();
                otherTable.getRowSorter().setSortKeys(sorter.getSortKeys());
            }
        }

    };
    table.getRowSorter().addRowSorterListener(l);

Если вам нужно сохранить синхронизацию в обоих направлениях, зарегистрируйте прослушиватель в обоих случаях и добавьте логику, чтобы ничего не делать, когда изменение сортировки было инициировано слушателем.

Редактировать

после того, как написал почти один и тот же комментарий дважды (к ответам на предложения о сортировке модели), решил добавить его сюда

  • технически, сортировка может быть решена как ответственность модели или области просмотра. Есть (сильно обсуждаемые в прошлом) плюсы и минусы в любом случае. После этого придерживайтесь этого решения везде в пользовательском интерфейсе
  • Хранение отображения индекса между моделью и системой координат представления - это то, где проблемы скрываются в любом случае
  • Swing / X решил считать это представлением ответственности, потому что любая пользовательская сортировка / синхронизация на основе модели - это борьба с системой
1 голос
/ 21 октября 2011

Я думаю, что пользовательский интерфейс только усложняет проблему. Подумайте об этом с точки зрения базовых данных таблицы, и вы почувствуете себя лучше. Если вы можете сделать это правильно, это просто вопрос отображения.

Сортировать коллекцию значений не сложно. Для этого вы можете использовать java.util.Collections и Comparable.

Хитрость заключается в поддержании связи между индексами отсортированного столбца и остальными столбцами в строке.

0 голосов
/ 21 октября 2011

Самый простой способ - сортировка базовых данных. Или вы можете реализовать sortlistener и добавить его в обе таблицы.

Следующий поток показывает, как реализовать это в JXTable:

http://www.java.net/node/680987

...