Я знаю (я посмотрел на источники;)), что сортировка по JXTreeTable отключена.Как сделать 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
.
.
.
Как я понимаю, это ressembles для простой таблицы сортировки (так иерархического ограничения вызывается для отключения сортировки приподнимается).
Я вижу 2 возможности, чтобы сделать это:
- Повторно включите сортировочный механизм, доступный в JXTable, чтобы извлечь выгоду из всего того, что уже реализовано (сортировщик, сортировочного, нажав на заголовки, ...) и только сортировать узлы первого уровня (поскольку их дети все равно будут иметь один и тот же родительский элемент).
- Реализовать основные элементы, которые мне нужны (сортировка, нажав на заголовки в основном), иметь список идентификаторов строк модели в JXSortableTreeModel, которые я сортирую и переопределяю convertRowIndexToModel, который позволит (я думаю) отобразить мой элемент, отсортированный как я хотеть.
Мой любимый, конечно, первый, но я не знаю, как его достичь. Первое ограничение заключается в том, что я не знаю, как повторно включить сортировку, поскольку JXTreeTable переопределяет setSortable() (и все связанные методы), и я не знаю, как получить прямой доступ к реализации метода в JXTable (это проблема Java). Я мог бы просто скопировать код JXTreeTable и удалить переопределения, но это не вариант, на мой взгляд.
Скажем, я решаю это, как бы ограничить сортировку узлов первого уровня? Даже посмотрев на источник, я довольно не знаю, как это сделать.
Со вторым я потерял все преимущества существующего кода, но я вижу практический способ достижения того, что я хочу (на данный момент, по крайней мере. Кто знает, не хочет ли фильтр фильтровать данные по всем строкам?).
Есть ли другой способ? Если нет, какое из моих решений я должен выбрать? Какие-нибудь проницательные комментарии?
Большое спасибо заранее!
Спасибо! Я просмотрел источники TreeTable, и я должен сказать, это выглядит многообещающим. Я постараюсь лучше рассмотреть его позже :) – ixM
Решение Aephyr работает хорошо, но исходный код практически не содержит документации или комментариев. Демонстрация - хороший пример, но я все еще сталкивался с несколькими Исключениями, которые были выброшены на EDT. Головные боли отладки и поддержки этих и будущих проблем в коде вроде этого - большие пальцы вниз для меня. – Nate
@nate это кодовая выставка одного из великих гуру Свинг, кодовых складов для нескольких форумов, на которых афиры являются членами, не имеют представления об исключениях EDT или нарушениях, из вашего кода должна быть вторичная проблема :-) – mKorbel