Создание подкласса DefaultRowSorter для сортировки таблицы по дереву -
В этом вопросе я спросил, как можно было заставить JXTreeTable (SwingX )отсортировать его верхний элемент.
Я взглянул на библиотеку(aephyr ), предложенную mKorbel , и попытался объединить ее с JXTreeTable (Я создал новый класс с именем JXSortableTreeTable, скопировав исходный код JXTreeTable. ).
На данный момент мне удалось реализовать механизм сортировки узлов дерева -таблицы, т.е. когда convertRowIndexToModelмоего пользовательского сортировщика (см. ниже )вызывается, индексы, которые он возвращает, правильный.
Таким образом, у меня есть класс, который выглядит так:
public class TreeTableRowSorter extends DefaultRowSorter {
private M treeTableModel; // model
private List indices; // list where each entry is the model index
private IdentityHashMap
Если данные модели организованы так (с индексом каждого глобального узла в модели, показанным в последнем столбце):
То, что я на самом деле получаю, точно такое же, как и не отсортированная -версия, за исключением того, что результат convertRowIndexToModel правильный, потому что, если я вызову его для каждой строки модели,Я получаю:
V -> M
0 -> 3
1 -> 5
2 -> 4
3 -> 0
4 -> 1
5 -> 2
Таким образом, мой вопрос сводится к:
При создании подкласса DefaultRowSorter для реализации сортировки древовидной -таблицы, такой как JXTreeTable, какие методы следует переопределить? Поскольку я не могу переопределить viewToModel для rowSorter (private )или любой функции, которая его изменяет (также private ), я реализовал собственное создание карты V ->M и убедился, что она используется при вызове convertRowIndexTo (Model|View )моего сортировщика.
Я чувствую, что чего-то не хватает, например вызова метода преобразования где-то в JXSortableTreeTable или, возможно, в пользовательском сортировщике.
Большое спасибо за помощь и полезные комментарии!
Редактировать> После небольшого тестирования результата, похоже, он скорее связан с иерархическим столбцом JXTreeTable, для которого данные не обновляются, поскольку он отлично работает при сортировке по другим столбцам. (Я также пробовал чтобы изменить иерархический столбец (установить другой столбец )и первый работает, когда он больше не иерархический)