有没有办法做一个低级别的绑定,但也能够setDisable(ture/false)
到控制器?
例如:
HBoxSomeBox.disableProperty().bind(new BooleanBinding() {
{
bind(someIntValue);
}
@Override
protected boolean computeValue() {
return someIntValue >=2 ;
}
});
代码中的其他地方HBoxSomeBox.setDisable(false)
。
目前,当我尝试这样做时会引发异常:
java.lang.RuntimeException:HBox.disable:无法设置绑定值。
那么有另一种方法可以设置绑定控制器,还能设置它吗?
答案 0 :(得分:4)
从评论中,您似乎希望在someIntValue
的值至少为2时或在“由视图指示”的其他情况下禁用您的控件。您可以创建表示其他情况的BooleanProperty
,并在绑定中使用它:
IntegerProperty someIntProperty = ... ;
BooleanProperty forceDisable = new SimpleBooleanProperty();
hboxSomeHBox.disableProperty().bind(new BooleanBinding() {
{
bind(someIntValue, forceDisable);
}
@Override
public boolean computeValue() {
return someIntValue.get() >= 2 || forceDisable.get() ;
}
}
或者,更简洁,
BooleanProperty forceDisable = new SimpleBooleanProperty();
hboxSomeHBox.disableProperty().bind(someIntValue.greaterThanOrEqualTo(2).or(forceDisable));
然后调用forceDisable.set(true);
将禁用该控件。
您也可以通过听众简单地实现这一目标:
someIntValue.addListener((obs, oldValue, newValue) -> {
if (newValue.intValue() >= 2) {
hboxSomeHBox.setDisable(true);
}
});
由于未绑定属性,您可以通常的方式设置它。