0

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

0 回答 0