Mon objectif est de lier ces deux propriétés, par exemple lorsque checkbox
est sélectionné, alors paneWithControls
est activé et inversement.
CheckBox checkbox = new CheckBox("click me");
Pane paneWithControls = new Pane();
checkbox.selectedProperty().bindBidirectional(paneWithControls.disableProperty());
avec ce code cependant son contraire de ce que je veux. J'ai besoin de quelque chose comme une reliure booléenne inverse. Est-ce possible ou dois-je mettre au point une méthode pour y faire face?
Si vous souhaitez uniquement une liaison unidirectionnelle, vous pouvez utiliser la méthode not()
définie dans BooleanProperty
:
paneWithControls.disableProperty().bind(checkBox.selectedProperty().not());
C’est probablement ce que vous voulez, à moins que vous n’ayez réellement d’autres mécanismes pour changer le disableProperty()
qui n’impliquent pas le checkBox
. Dans ce cas, vous devez utiliser deux écouteurs:
checkBox.selectedProperty().addListener((obs, wasSelected, isNowSelected) ->
paneWithControls.setDisable(! isNowSelected));
paneWithControls.disableProperty().addListener((obs, wasDisabled, isNowDisabled) ->
checkBox.setSelected(! isNowDisabled));
checkbox.selectedProperty().bindBidirectional(paneWithControls.disableProperty().not());
devrait marcher
Quelque chose comme ça? Voir le lien ci-dessous http://docs.Oracle.com/javase/8/javafx/api/javafx/beans/binding/BooleanExpression.html#not--