如果我有一个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]