我们假设我有一个实体类Foo,它包含一些字段,getters,setter和构造函数。例如:是否可以创建一个属性来监听javafx中自定义对象的变化?
public class Foo {
private Integer a = 0;
private Integer b = 0;
public Foo() {
}
public Integer getA() {
return a;
}
public void setA(Integer a) {
this.a = a;
}
public Integer getB() {
return b;
}
public void setB(Integer b) {
this.b = b;
}
}
然后我想知道什么时候a或b发生了变化。我知道javaFX中有一个ObjectProperty。所以我创建对象属性:
ObjectProperty<Foo> fooProperty = new SimpleObjectProperty<>(new Foo());
然后为了了解A和B场的变化,我添加的ChangeListener:
fooProperty.addListener((observable, oldValue, newValue) -> {
System.out.println("Property changed!");
});
然后实验:
fooProperty.set(new Foo());
工作好,但下一行:
fooProperty.get().setA(10)
不会调用侦听器。原因很明显。最后一行实际上不会更改Foo对象(引用保持不变)。
我有一些可能的解决方案。但他们都不够优雅。例如,将每个字段更改为属性并为每个变量添加相同的侦听器。
所以,问题是。添加侦听器以更改自定义对象字段的方法是什么?
这难道不是通过将'a'和'b'实现为'IntegerProperty'并使用固定的'Foo'实例解决的吗?或者我误解了这个问题? –