How to make a JXTreeTable sort its top elements

I'm aware (I've looked at the sources ;) ) that sorting on JXTreeTable has been disabled.

However, I would like to allow sorting on all columns based only on the values of the direct children of the root node.

Say I have a structure like this:

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
.
.
.

What I want to achieve is sorting on the 3 columns only on first level nodes. Say I want to sort it by ascending date, it would end up like that:

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 возможности сделать это:

  1. Повторно включить механизм сортировки, доступный в JXTable, чтобы воспользоваться всем, что уже реализовано (сортировщик, сортировка по щелчку на заголовках, ...) и сортировать только узлы первого уровня (так как их дочерние узлы будут иметь одного родителя).
  2. Реализовать основные вещи, которые мне нужны (сортировка по клику на заголовках в основном), иметь список моделей-строк-идей в JXSortableTreeModel, которые я сортирую и переопределить convertRowIndexToModel, что позволит (я думаю) отобразить мой элемент отсортированным, как я хочу.

Больше всего мне нравится, конечно, первый вариант, но я не знаю, как его реализовать. Первое ограничение заключается в том, что я не знаю, как снова включить сортировку, поскольку JXTreeTable переопределяет setSortable() (и все связанные методы), и я не знаю, как получить прямой доступ к реализации метода в JXTable (это проблема Java). Я мог бы просто скопировать код JXTreeTable и удалить переопределения, но это не вариант, на мой взгляд.

Допустим, я решу эту проблему, но как мне ограничить сортировку узлами первого уровня? Даже посмотрев исходники, я не знаю, как это сделать.

Во втором случае я теряю все преимущества существующего кода, но вижу практический способ достичь желаемого (по крайней мере, пока. Кто знает, не захочется ли фильтровать данные по всем строкам?).

Есть ли другой путь? Если нет, то какое из решений мне выбрать? Любые проницательные комментарии?

Заранее большое спасибо!

8
задан ixM 1 March 2012 в 14:13
поделиться