Я предполагаю, что SortableList
, о котором вы говорите, используется в FXCollections.sort
.
ListProperty
может реализовать интерфейс SortableList
.
Это действительно может быть хорошей идеей, поскольку это позволит вам выбрать способ сортировки обернутого списка, если, например. FXCollections.sort
используется в свойстве. В этом случае вы можете использовать FXCollections.sort
в содержащемся списке.
Как они могли? Как это:
class MyListProperty<T> extends ListPropertyBase<T> implements SortableList<T> {
...
@Override
public void sort() {
ObservableList<T> list = getValue();
if (list != null) {
FXCollections.sort((ObservableList<Comparable>) list);
}
}
@Override
public void sort(Comparator<? super T> comparator) {
ObservableList<T> list = getValue();
if (list != null) {
FXCollections.sort(list, comparator);
}
}
}
Единственная проблема заключается в том, что SortableList
находится внутри пакета com.sun.javafx.collections
(см. Использование проприетарных классов Java Sun является плохой практикой? ).
О вашем столкновении со схемой свойств: его нет, если вы определяете свойство предполагаемым образом, см. Использование свойств и привязки JavaFX раздел Понимание свойств
Свойство будет реализовано следующим образом:
private final ListProperty<MyClass> someList = ...;
public ObservableList<MyClass> getSomeList() {
return someList.get();
}
public void setSomeList(ObservableList<MyClass> newList) {
someList.set(newList);
}
public ListProperty<MyClass> someListProperty() {
return someList;
}
ListProperty
должен обеспечить, чтобы зарегистрированные в нем ListChangeListener
получали события изменения из обернутого списка.
Возможно, вы запутались со свойствами списка только для чтения, используемыми в fxml, но ListProperty
не предназначен только для чтения.
Вы по-прежнему можете использовать это свойство в файле fxml, но вам нужно будет использовать значение типа ObservableList
:
<!-- imports -->
<ContainingClass xmlns:fx="http://javafx.com/fxml/1">
<someList>
<FXCollections fx:factory="observableArrayList">
<!-- list content goes here -->
</FXCollections>
</someList>
</ContainingClass>
person
fabian
schedule
27.11.2015