如果我有一个按SortedList<PlanItem>
排序的IntegerProperty rankProperty
个对象,并决定编辑这些项目(在其源列表中),我怎么知道发生了变化?例如,如果我使用list.get(2).setRank(3)
,那么我需要让SortedList响应并重新排列。我不打算通过每个人并为他们的属性添加一个监听器。例如,可能有30个属性。我只是想让ObsList知道发生了变化。
到目前为止,我知道的唯一方法是将PlanItems视为不可变的,并且只对编辑索引使用set()。这样,SortedList会捕获更改。但我想让我的PlanItems变得可变。它使编码逻辑更容易(虽然不是非常安全)。
更新:ListChangeListener中的以下触发器是wasUpdated()。我只希望它触发一次。
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]