gpt4 book ai didi

java - Controller 的 disableProperty 和 setDisable 的低级绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 06:52:12 26 4
gpt4 key购买 nike

有没有一种方法可以进行低级别绑定(bind),但仍然能够对 Controller 执行 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 : A bound value cannot be set.

那么有没有另一种方法既可以绑定(bind) Controller 又可以设置它?

最佳答案

从评论来看,您似乎希望在 someIntValue 的值至少为 2 或在“由 View 决定”的其他情况下随时禁用您的控件。您可以创建代表那些其他情况的 BooleanProperty,并在绑定(bind)中使用它:

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);
}
});

由于未绑定(bind) disable 属性,您可以按照通常的方式自由设置它。

关于java - Controller 的 disableProperty 和 setDisable 的低级绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39415332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com