Java Swing: принудительное выполнение определенных элементов в конце отсортированного JTable - PullRequest
4 голосов
/ 14 декабря 2011

Как заставить определенные строки таблицы находиться в конце отсортированного JTable?Например, если кто-то нажимает на заголовок столбца для сортировки по этому столбцу, у меня есть несколько строк, которые я всегда хочу видеть в конце таблицы независимо от порядка сортировки.Как мне сделать так, чтобы это произошло?

Спасибо!

Ответы [ 3 ]

1 голос
/ 14 декабря 2011

Вы можете реализовать интерфейс Comparator, как показано в Как использовать таблицы: сортировка и фильтрация , или реализовать Comparable Интерфейс, как показано в классе Value этого примера .В любом из этих подходов вы можете изменить результат метода сравнения так, чтобы нужные строки отображались после всех остальных.

Добавление: Как @ 1018 * answer @ kleopatra's answer *1019*,Comparator должен применяться в контексте таблицы RowSorter, в то время как реализация Comparable будет влиять на естественное упорядочение .Поскольку результат запутан и трудно поддерживать, вы можете рассмотреть альтернативный подход.

1 голос
/ 14 декабря 2011

Осторожно: это не ответ, а просто краткое изложение трудностей и некоторых ссылок.

Это одна из тех задач, которые на удивление трудно решить.Ничего в ядре (даже в SwingX :-), которое его поддерживает.В частности, Comparator не помогает, потому что он ничего не знает о направлении сортировки, то есть он не может знать, должен ли он найти определенную строку сверху или снизу.Единственный соавтор, который может это сделать, может быть RowSorter.Из-за того, что все в DefaultRowSorter тесно скрыто, настройка сводится к полной повторной реализации.Пример обработки нулей был опубликован Уолтером Ланом в OTN, а позже описан как подправленный для более сложного контекста.

1 голос
/ 14 декабря 2011

Если вы используете DefaultTableModel для своей таблицы, то вы можете использовать API moveRow (startRow, endRow, destinationPosition) для перемещения рассматриваемой строки / строк туда, куда вы хотите поместить их в JTable. Каждый раз, когда таблица сортируется (определитель слушателя), вам придется делать это.

Вы можете ответить на этот вопрос: Перемещение строки в jTable , которая как бы связана

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...