У меня проблемы с сортировкой JFXTreeTableView
(от Jfoenix).
Я создал объект с именем ScanModel, который расширяет RecursiveTreeObject<ScanModel>
от Jfoenix.
Одно из многих свойств, которые у меня есть, это:private IntegerProperty id;
Вот его геттеры и сеттеры
public final IntegerProperty idProperty() {
if (id == null) {
id = new SimpleIntegerProperty();
}
return id;
}
public final int getId() {
return idProperty().get();
}
public void setId(int value) {
idProperty().set(value);
}
Два класса расширяют абстрактный класс ScanModel: StudyModel и SeriesModel.
StudyModel (который содержит несколько моделей SeriesModel) переопределяет метод getChildren()
Jfoenix RecursiveTreeObject и возвращает наблюдаемый список серий.
Вот как я привязываю наблюдаемый список, содержащий элементы, к самой таблице:
protected void createTree(JFXTreeTableView<ScanModel> tree, ObservableList<ScanModel> elements) {
tree.setRoot(new RecursiveTreeItem<ScanModel>(elements, RecursiveTreeObject::getChildren));
tree.setShowRoot(false);
tree.getSelectionModel().clearSelection();
}
До сих пор все работало отлично, я добавил новые элементы ScanModel в наблюдаемый список, и он автоматически отображался в пользовательском интерфейсе.
Теперь о моей проблеме:
Клиент запрашивает отсортированную таблицу: Модели исследований по убыванию и Модели серий по возрастанию.
Сначала я попытался отсортировать только модели StudyModels.
Я изменил метод createTree на следующую реализацию:
protected void createTree(JFXTreeTableView<ScanModel> tree, ObservableList<ScanModel> elements) {
SortedList<ScanModel> sortedElements = elements.sorted((l, r) -> Integer.compare(l.getId(), r.getId()));
tree.setRoot(new RecursiveTreeItem<ScanModel>(sortedElements, RecursiveTreeObject::getChildren));
tree.setShowRoot(false);
tree.getSelectionModel().clearSelection();
}
Отсортированный наблюдаемый список действительно отсортирован, но это не отражается в пользовательском интерфейсе
Что я здесь упускаю?
Спасибо.
Обновление
На всякий случай вот fxml таблицы
<JFXTreeTableView fx:id="_treeTableView">
<placeholder>
<Label text="No Normal Studies to display" />
</placeholder>
<columnResizePolicy>
<JFXTreeTableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
<columns>
<JFXTreeTableColumn text="ID" sortable="false"
minWidth="150" maxWidth="150">
<cellValueFactory>
<TreeTableErrorIndicationCellFactory value="id" />
</cellValueFactory>
</JFXTreeTableColumn>
<JFXTreeTableColumn text="Scan Time" sortable="false"
minWidth="140" maxWidth="140">
<cellValueFactory>
<TreeTableErrorIndicationCellFactory value="formattedScanTime" />
</cellValueFactory>
</JFXTreeTableColumn>
<JFXTreeTableColumn text="Selected" sortable="false"
minWidth="60" maxWidth="60">
<cellValueFactory>
<ScanSelectedValueFactory />
</cellValueFactory>
</JFXTreeTableColumn>
<JFXTreeTableColumn sortable="false">
</JFXTreeTableColumn>
<JFXTreeTableColumn text="Archived" sortable="false"
style="-fx-alignment: CENTER-RIGHT;" minWidth="60" maxWidth="60">
<cellValueFactory>
<IsArchivedCellFactory />
</cellValueFactory>
</JFXTreeTableColumn>
</columns>
</JFXTreeTableView>