以下情況:攔截屬性綁定
DoubleProperty p1 = new SimpleDoubleProperty(1.0);
DoubleProperty p2 = new SimpleDoubleProperty(5.5);
p1.bind(p2);
是它在某種程度上可以修改這個直接的方式攔截值設定處理,以便修改設定值?
以下情況:攔截屬性綁定
DoubleProperty p1 = new SimpleDoubleProperty(1.0);
DoubleProperty p2 = new SimpleDoubleProperty(5.5);
p1.bind(p2);
是它在某種程度上可以修改這個直接的方式攔截值設定處理,以便修改設定值?
如果SimpleDoubleProperty
不是最終可以覆蓋bind()
功能如下,並創建一個匿名子類:
DoubleProperty p1 = new SimpleDoubleProperty(1.0){
@Override
public void bind(DoubleProperty property){
// do your interception-magic here
}
};
如果你只是想在值進行簡單的算術,你可以使用綁定API,它支持相當豐富的算術函數:
p1.bind(p2.multiply(p2).add(1));
將確保p1
總是等於p2*p2+1
(就像一個任意的例子),和
將確保p1
總是等於p2
時p2
是非負的,並且p1
是零,否則。
如果這不足以滿足您的需求,您可以使用自定義綁定,例如:
p1.bind(Bindings.createDoubleBinding(() -> {
double p2Value = p2.getValue();
double interceptedValue = ... ;
return interceptedValue ;
}, p2);
最後一個參數是一個Observable
可變參數,所以你可以列出的任何屬性(或其他觀測)那裏你想觸發綁定的失效。
的等效方式是繼承DoubleBinding
:
p1.bind(new DoubleBinding() {
{
bind(p2); // and to other properties if needed...
}
@Override
protected double computeValue() {
double p2Value = p2.getValue();
double interceptedValue = ... ;
return interceptedValue ;
}
});
修改它怎麼樣?如果需要,可以使用各種方法創建自定義綁定,但我不確定這是否是您要查找的內容。 –