Если у меня есть SortedList<PlanItem>
объекты, отсортированные по их IntegerProperty rankProperty
, и я решу отредактировать эти элементы (в их исходном списке), как я узнаю, что произошло изменение? Например, если я использую list.get(2).setRank(3)
, мне нужно, чтобы SortedList ответил и перестроил себя. Я не собираюсь проходиться по каждому из них и добавлять слушателя к их свойствам. Например, может быть 30 свойств. Я просто хочу сообщить ObsList, что произошли изменения.
До сих пор единственный известный мне способ - рассматривать PlanItems как неизменяемые и использовать set() только для индекса редактирования. Таким образом, SortedList ДЕЙСТВИТЕЛЬНО улавливает изменения. Но я хочу сделать свои PlanItems изменчивыми. Это значительно упрощает логику кодирования (хотя и не очень многопоточно).
Обновление: следующие триггеры wasUpdated() в ListChangeListener. Я хочу, чтобы он срабатывал только один раз.
PlanItem a = new PlanItem(), b = new PlanItem();
ObservableList<PlanItem> src = FXCollections.observableArrayList((PlanItem param) -> {
return new Observable[]{param.nameProperty(), param.magnitudeProperty()};
});
src.addAll(a, b);
ObservableList<String> bound = FXCollections.observableArrayList();
CustomBindings.bindLists(bound, src, PlanItem::getName);
System.out.println(src);
System.out.println(bound);
src.get(0).setName("NEW");
src.get(0).setMagnitude(4);
System.out.println("SRC: " + src);
System.out.println("BD: " + bound);
[DEFAULT_NAME [DKJA31], DEFAULT_NAME [9IHCDC]]
[DEFAULT_NAME, DEFAULT_NAME]
UPDATED
UPDATED
SRC: [NEW [DKJA31], DEFAULT_NAME [9IHCDC]]
BD: [DEFAULT_NAME, DEFAULT_NAME]