我对javaFX中的听众感到有些困惑。
我有一个实现Observable的类(我们称之为ObservedContainer),它包含一些Observables对象的列表:
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
对象的监听器进行预订,并对此作出反应?
谢谢!
答案 0 :(得分:1)
有一个类应该为您处理:ObservableList
FXCollections.observableArrayList
method可用于触发对列表中元素属性修改的更新更改。
ObservableList<Node> list = FXCollections.observableArrayList(node -> new Observable[] { node.translateXProperty() });
如果其中一个列表元素的translateX
属性被修改,则会触发侦听器。
如果你坚持在自己的类中包装列表,你可以简单地添加一个触发包装器的失效事件的监听器:
list.addListener((Observable o) -> fireInvalidationEvent());