Я знаю (я просмотрел исходники ;)) что сортировка в 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 и удалить переопределения, но, на мой взгляд, это не вариант.
Скажем, я решаю это, как бы я ограничил сортировку узлами первого уровня? Даже после просмотра источника я не знаю, как это сделать.
Со вторым я теряю все преимущества существующего кода, но вижу практичный способ добиться того, чего хочу (по крайней мере, на данный момент. Кто знает, не захочет ли фильтровать данные во всех строках?).
Есть ли другой путь? Если нет, то какое из моих решений выбрать? Есть дельные комментарии?
Спасибо заранее!