2013-11-28 11 views
9

Mam prosty fxml z polem tekstowym i przyciskiem. Chciałbym, aby przycisk był wyłączony, jeśli pole tekstowe jest puste. Dlatego wstawiam w moim kontrolerze coś takiego:Wiązanie JavaFX z wieloma właściwościami

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

.. i to działa dobrze. Problem polega na tym, że dodaję drugie pole tekstowe i chciałbym, aby mój przycisk był wyłączony, jeśli pole tekstowe jest puste. Co robić? Próbowałem następujących, ale to nie działa:

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

Odpowiedz

15

Jest to możliwe poprzez wiązanie się z logiczną wyrażenia poprzez Bindings:

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

.textProperty(). IsEmpty() - wydaje mi się lepszym podejściem. –

5

Oprócz podejścia Andreys, stwierdziliśmy, że można również zrobić to tak:

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

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

Oprócz martin_dk odpowiedź, jeśli chcesz związać więcej niż dwie właściwości dostaniesz kod jak poniżej, wygląda dziwnie, ale działa.

BooleanBinding booleanBinding 
     = finalEditor.selectedProperty().or(
       staticEditor.selectedProperty().or(
         syncEditor.selectedProperty().or(
           nativeEditor.selectedProperty().or(
             strictEditor.selectedProperty())))); 

abstractEditor.disableProperty().bind(booleanBinding); 
Powiązane problemy