gpt4 book ai didi

JavaFX:如何使包含其他 Observable 对象列表的 Observable 对象失效

转载 作者:行者123 更新时间:2023-11-30 06:46:41 25 4
gpt4 key购买 nike

我对 javaFX 中的监听器有点困惑。

我有一个实现 Observable 的类(我们称之为 ObservedContainer),其中包含一些也是 Observable 的对象的列表:

public class ObservedContainer implements Observable {
ArrayList<AnotherObservableClass> someOtherClasses;
(...observable implementation omitted for brevity)
}

当我从数组中添加或删除某些内容时,我可以使类无效 - 没关系:

public class ObservedContainer implements Observable {
ArrayList<AnotherObservableClass> someOtherClasses = new ArrayList<>();
(...observable implementation omitted for brevity)

public void addAnotherObservableClass(AnotherObservableClass a){
someOtherClasses.add(a);
fireInvalidationEvent();
// This just notifies all listeners that the object has changed
}

public void removeAnotherObservableClass(AnotherObservableClass a){
someOtherClasses.remove(a);
fireInvalidationEvent();
}
}

但是当数组中的对象被修改时,如何让它触发失效事件? ObservedContainer 对象是否应该作为每个 AnotherObservableClass 对象的监听器进行订阅,并对此使用react?

谢谢!

最佳答案

有一个类应该为您处理这个问题:ObservableList

FXCollections.observableArrayList method可用于触发列表中元素属性修改的更新更改。

示例

ObservableList<Node> list = FXCollections.observableArrayList(node -> new Observable[] { node.translateXProperty() });

如果列表元素之一的 translateX 属性被修改,则会触发监听器。

如果您坚持将列表包装在您自己的类中,您可以简单地添加一个监听器来触发包装器的失效事件:

list.addListener((Observable o) -> fireInvalidationEvent());

关于JavaFX:如何使包含其他 Observable 对象列表的 Observable 对象失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43569244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com