如何绑定反向布尔值,JavaFX

如何绑定反向布尔值,JavaFX,java,binding,boolean,javafx-8,Java,Binding,Boolean,Javafx 8,我的目标是绑定这两个属性,例如当选中复选框时,启用窗格控件,反之亦然 CheckBox checkbox = new CheckBox("click me"); Pane paneWithControls = new Pane(); checkbox.selectedProperty().bindBidirectional(paneWithControls.disableProperty()); 然而,这个代码与我想要的相反。我需要像反向布尔绑定这样的东西。有没有可能或者我必须制定一个方法来

我的目标是绑定这两个属性,例如当选中
复选框
时,启用
窗格控件
,反之亦然

CheckBox checkbox = new CheckBox("click me");
Pane paneWithControls = new Pane();

checkbox.selectedProperty().bindBidirectional(paneWithControls.disableProperty());
然而,这个代码与我想要的相反。我需要像反向布尔绑定这样的东西。有没有可能或者我必须制定一个方法来处理它?

类似的事情? 请参阅下面的链接

如果只需要单向绑定,可以使用
BooleanProperty
中定义的
not()
方法:

paneWithControls.disableProperty().bind(checkBox.selectedProperty().not());
这可能是您想要的,除非您确实有其他机制来更改
disableProperty()
,而这些机制不涉及
复选框。在这种情况下,您需要使用两个侦听器:

checkBox.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> 
    paneWithControls.setDisable(! isNowSelected));

paneWithControls.disableProperty().addListener((obs, wasDisabled, isNowDisabled) ->
    checkBox.setSelected(! isNowDisabled));
应该可以工作

使用可以轻松创建一个新的ObservalEvalue,该值来自
复选框。selectedProperty()
,具有其值的反转

paneWithControls.disableProperty().bind(EasyBind.map(checkbox.selectedProperty(), Boolean.FALSE::equals));

…disableProperty().not(),但它返回
BooleanBinding
值。我不能像上面的例子那样使用它。
paneWithControls.disableProperty().bind(checkBox.selectedProperty().not())这给了我编译器错误:ReadOnlyBooleanProperty类型的方法绑定(BooleanBinding)未定义其他方法:
复选框.selectedProperty().bind(paneWithControls.disableProperty().not())在我单击复选框时给出异常
java.lang.RuntimeException:checkbox.selected:无法设置绑定值。
我想您一定使用了disabledProperty而不是DisableProperty从FXML如何?如果我们有一个带有
fx:id=abc
复选框
,那么这样的代码:
将导致选中复选框时禁用文本字段。如果不检查,我们如何获得相同的行为?
paneWithControls.disableProperty().bind(EasyBind.map(checkbox.selectedProperty(), Boolean.FALSE::equals));