2013-11-28 1 views
9

Ich habe eine einfache fxml mit einem Textfeld und einer Schaltfläche. Ich möchte die Schaltfläche deaktiviert haben, wenn das Textfeld leer ist. So füge ich etwas wie das Folgende in meine Steuerung ein:JavaFX an mehrere Eigenschaften binden

@Override 
public void initialize(URL url, ResourceBundle bundle) { 
    button.disableProperty().bind(textField.textProperty().isEqualTo("")); 
} 

..und das funktioniert gut. Das Problem ist, wenn ich ein zweites Textfeld hinzufüge und möchte, dass meine Taste deaktiviert wird, wenn eines der Textfelder leer ist. Was dann zu tun? Ich folgendes versucht, aber das funktioniert nicht:

@Override 
public void initialize(URL url, ResourceBundle bundle) { 
    button.disableProperty().bind(textField.textProperty().isEqualTo("")); 
    button.disableProperty().bind(textField2.textProperty().isEqualTo("")); 
} 

Antwort

15

Dies ist möglich, indem über Bindings in einen Booleschen Ausdruck Bindung:

button.disableProperty().bind(
    Bindings.and(
     textField.textProperty().isEqualTo(""), 
     textField2.textProperty().isEqualTo(""))); 
+1

.textProperty(). IsEmpty() - scheint eine bessere Annäherung an mich. –

5

Neben Andreys Ansatz, fand ich, dass Sie auch tun es wie folgt aus:

BooleanBinding booleanBinding = 
     textField.textProperty().isEqualTo("").or(
     textField2.textProperty().isEqualTo("")); 

    button.disableProperty().bind(booleanBinding); 
1

Zusätzlich Antwort auf martin_dk, wenn Sie mehr als zwei Eigenschaften binden wollen, werden Sie Code wie unten bekommen, sieht seltsam, aber es funktioniert.