web-dev-qa-db-fra.com

comment lier inverse boolean, JavaFX

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?

15
Tomasz Mularczyk

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));
23
James_D
checkbox.selectedProperty().bindBidirectional(paneWithControls.disableProperty().not());

devrait marcher

1
Ingo
0
borovsky