我有一个由多个可观察SimpleDoubleProperty
组成的模型,我现在有一个程序根据可观察属性的变化运行一个函数。
我现在有一个函数calculateThings,它会在更改时被调用:
public double calculateThings() {
return getA() + getB() + getC();
}
为了触发该功能,我确实将ChangeListener附加到每个属性:
aProperty().addListener(observable -> calculateThings());
bProperty().addListener(observable -> calculateThings());
cProperty().addListener(observable -> calculateThings());
是否有可能将ChangeListener添加到多个属性以简化更改侦听? Bindings API在这里不合适,计算相当复杂。
喜欢:
commonObservable().addListener(observable -> calculateThings());
答案 0 :(得分:4)
您可以使用Bindings API进行任意复杂的计算,例如使用自定义绑定:
DoubleBinding computed = new DoubleBinding() {
{
super.bind(aProperty, bProperty, cProperty);
}
@Override
public double computeValue() {
return getA() + getB() + getC() ;
}
};
或使用Bindings.createXXXBinding(...)
实用程序方法:
DoubleBinding computed = Bindings.createDoubleBinding(
() -> getA() + getB() + getC(),
aProperty, bProperty, cProperty);
在任何一种情况下,绑定都会在任何绑定属性(示例中的aProperty
,bProperty
或cProperty
)发生更改时自动更新,您可以绑定到{{ 1}}或以通常的方式添加监听器:
computed