如何绑定反向布尔值,JavaFX

how to bind inverse boolean, JavaFX

我的目标是绑定这两个属性,例如当 checkbox 被选中时 paneWithControls 被启用,反之亦然。

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

checkbox.selectedProperty().bindBidirectional(paneWithControls.disableProperty());

使用此代码,但它与我想要的相反。我需要类似反向布尔绑定的东西。是否可以或必须制定一种方法来处理它?

类似的东西? 请参阅下面的 link http://docs.oracle.com/javase/8/javafx/api/javafx/beans/binding/BooleanExpression.html#not--

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

paneWithControls.disableProperty().bind(checkBox.selectedProperty().not());

这可能是您想要的,除非您真的有其他机制来更改 disableProperty() 而不涉及 checkBox。在这种情况下,您需要使用两个侦听器:

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

paneWithControls.disableProperty().addListener((obs, wasDisabled, isNowDisabled) ->
    checkBox.setSelected(! isNowDisabled));
checkbox.selectedProperty().bindBidirectional(paneWithControls.disableProperty().not());

应该可以

使用 EasyBind library 可以很容易地创建一个新的 ObservableValue,它来自 checkbox.selectedProperty(),具有其值的反转。

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