Как включить значки и поведение JTable для сортировки строк таблицы по столбцу, не позволяя ей использовать предикат сравнения для сортировки? То есть, как мне указать заголовкам таблицы показывать стрелку для возрастающего / убывающего порядка сортировки в используемом столбце и заставить его вызывать соответствующие методы при изменении порядка сортировки / столбца?
Я пытаюсь создать (редактируемый, фильтруемый, сортируемый) JTable, поддерживаемый SQL-запросом или представлением. Строки могут не помещаться в памяти и могут отображаться некорректно на объекты Java, поэтому я хочу выполнить всю сортировку / фильтрацию в SQL. Я уже написал код для изменения запроса с учетом сортировки по столбцам, фильтрации по значениям и видимых столбцов.
Чтобы использовать это, я планирую написать JTableModel на основе ResultSet с TYPE_SCROLL_SENSITIVE,
и CONCUR_UPDATABLE
, поэтому изменения в БД распространяются в ResultSet. Я буду периодически (несколько раз в секунду) принудительно обновлять видимый JTable из ResultSet, поэтому изменения в базе данных станут видимыми для пользователя. Пользовательские изменения в таблице будут переданы в обновляемый ResultSet после проверки.
Я немного посмотрел на то, как сортировка выполняется нормально, но большинство реализаций, похоже, полагаются на JTable, создающий javax.swing.RowSorter с предикатом Comparator, или на поддержание отсортированного списка строк, которые запускают события, когда изменилось. Итак, мои вопросы:
Платформы ORM НЕ являются ответом на этот вопрос, поскольку данные плохо отображаются на объекты сущностей. Кроме того, я использую СУБД H2.
EDIT: Сортируемые библиотеки JTable, основанные на применении компараторов или предикатов сортировки к объектам строк, к сожалению, также не подходят. Я не верю, что смогу удерживать все объекты в памяти для выполнения сортировки. Эта проблема не позволяет мне использовать SwingX JXTables, GlazedLists или подобные библиотеки. Я бы хотел, но не могу. Период.
** Я буду иметь дело со многими тысячами строк, возможно, миллионами, с многочисленными столбцами. Да, мне действительно нужно использовать SQL для сортировки и фильтрации. **
Вопросы: (по убыванию)
- Как показать индикаторы, для которых столбец используется для сортировки строк?
- Как заставить JTable запускать соответствующие события, когда заголовки столбцов нажимаются ЛЕВЫМ для изменения порядка сортировки?
- Есть ли более простой способ принудительно обновить JTable при изменении базы данных?
- Существует ли библиотека, которая значительно упростила бы все это (соединяя запросы или представления БД и JTables)?
- Буду ли я сталкиваться с ужасными, ужасными проблемами, когда проектирую систему, подобную этой?