Я знаю (я посмотрел источники;)), что сортировка в JXTreeTable отключена.
Однако я хотел бы разрешить сортировку по всем столбцам только на основе значений прямых потомков корневого узла.
Скажем, у меня есть такая структура:
Name / Date / File UID
(Root)
|- Mr. X / 1996/10/22 / AE123F6D
|--- File1 / 2012/01/10 / DFC2345Q
|--- File2 / 2012/01/11 / D321FEC6
|- Mrs. Y / 1975/03/03 / G2GF35EZ
|--- File3 / 2012/02/29 / 35GERR32
|--- File4 / 2012/01/22 / LKJY2342
.
.
.
Я хочу добиться сортировки по 3 столбцам только на узлах первого уровня. Скажем, я хочу отсортировать его по возрастанию, в итоге это будет выглядеть так:
Name / Date / File UID
(Root)
|- Mrs. Y / 1975/03/03 / G2GF35EZ
|--- File3 / 2012/02/29 / 35GERR32
|--- File4 / 2012/01/22 / LKJY2342
|- Mr. X / 1996/10/22 / AE123F6D
|--- File1 / 2012/01/10 / DFC2345Q
|--- File2 / 2012/01/11 / D321FEC6
.
.
.
На мой взгляд, она похожа на простую сортировку таблиц (поэтому отменяется иерархическое ограничение, вызванное для отключения сортировки).
Я вижу 2 возможности сделать это:
- Повторно включите механизм сортировки, доступный в JXTable, чтобы извлечь выгоду из всего, что уже реализовано (сортировка, сортировка нажатием на заголовки, ...) и только сортировать узлы первого уровня (так как их дочерние элементы все еще будут иметь тот же родитель).
- Реализовать базовые вещи, которые мне нужны (сортировка по большей части нажатием на заголовки), иметь список идентификаторов строк-моделей в JXSortableTreeModel, который я сортирую и переопределяю convertRowIndexToModel, который позволит (я думаю) отображать мой элемент, отсортированный как я хочу.
Мой любимый, конечно, первый, но я не знаю, как этого добиться. Первое ограничение заключается в том, что я не знаю, как повторно включить сортировку, поскольку JXTreeTable переопределяет setSortable () (и все связанные методы), и я не знаю, как получить прямой доступ к реализации метода в JXTable (это проблема Java). ). Я мог бы просто скопировать код JXTreeTable и удалить переопределения, но, на мой взгляд, это не вариант.
Скажите, я решил это, как бы я ограничил сортировку узлами первого уровня? Даже посмотрев на источник, я не знаю, как это сделать.
Со вторым я теряю все преимущества существующего кода, но вижу практический способ достичь того, чего я хочу (по крайней мере, на данный момент. Кто знает, не захочет ли фильтровать данные по всем строкам?) .
Есть ли другой путь? Если нет, какое из моих решений я должен выбрать? Любые проницательные комментарии?
Заранее большое спасибо!