2015-04-13 20 views
14

Mein Ziel ist es, diese beiden Eigenschaften zu binden, wenn checkbox ausgewählt ist dann paneWithControls aktiviert ist und umgekehrt.Wie bind inverse boolean, JavaFX

mit diesem Code jedoch ist das Gegenteil zu dem, was ich will. Ich brauche etwas wie inverse boolesche Bindung. Ist es möglich oder muss ich eine Methode entwickeln, um damit umzugehen?

Antwort

17

Wenn Sie nur ein One-Way-Bindung wollen, können Sie die not() Methode in BooleanProperty definiert verwenden:

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

Dies ist wahrscheinlich das, was Sie wollen, wenn Sie wirklich andere Mechanismen haben zum Ändern der disableProperty(), die nicht die checkBox beinhalten. In diesem Fall müssen Sie zwei Hörer verwenden:.

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

paneWithControls.disableProperty().addListener((obs, wasDisabled, isNowDisabled) -> 
    checkBox.setSelected(! isNowDisabled)); 
+0

'paneWithControls.disableProperty(). Bind (checkBox.selectedProperty(). Not());' dies gibt mir compiller Fehler: _Die Methode bind (BooleanBinding) ist nicht definiert für den Typ ReadOnlyBooleanProperty_ – Tomasz

+0

andersherum: 'checkbox.selectedProperty() .bind (paneWithControls.disableProperty(). not()); 'gibt eine Ausnahme, wenn ich das Kontrollkästchen' java.lang.RuntimeException: CheckBox.selected: Ein gebundener Wert kann nicht gesetzt werden.' – Tomasz

+1

Ich denke, Sie müssen verwendet haben disabledProperty statt disableProperty –