我确实有一个由多个 observable 组成的模型SimpleDoubleProperty,我现在有一个程序,它根据 observable 属性的变化运行一个函数。
我现在确实有一个函数 calculateThings ,它在更改时被调用:
public double calculateThings() {
return getA() + getB() + getC();
}
Run Code Online (Sandbox Code Playgroud)
为了触发该功能,我将 ChangeListener 附加到每个属性:
aProperty().addListener(observable -> calculateThings());
bProperty().addListener(observable -> calculateThings());
cProperty().addListener(observable -> calculateThings());
Run Code Online (Sandbox Code Playgroud)
是否可以将 ChangeListener 添加到多个属性以简化更改侦听?Bindings API 不适合这里,计算相当复杂。
喜欢:
commonObservable().addListener(observable -> calculateThings());
Run Code Online (Sandbox Code Playgroud)
您可以使用 Bindings API 进行任意复杂的计算,例如使用自定义绑定:
DoubleBinding computed = new DoubleBinding() {
{
super.bind(aProperty, bProperty, cProperty);
}
@Override
public double computeValue() {
return getA() + getB() + getC() ;
}
};
Run Code Online (Sandbox Code Playgroud)
或使用Bindings.createXXXBinding(...)实用方法:
DoubleBinding computed = Bindings.createDoubleBinding(
() -> getA() + getB() + getC(),
aProperty, bProperty, cProperty);
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,绑定都会在任何绑定属性(aProperty、bProperty或cProperty在示例中)更改时自动更新,您可以以computed通常的方式绑定到或添加侦听器:
someDoubleProperty.bind(computed);
computed.addListener((obs, oldComputedValue, newComputedValue) -> {
/* some code */
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |