JavaFX bind to multiple properties

17,243

Solution 1

This is possible by binding to a boolean expression via Bindings:

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

Solution 2

In addition to Andreys approach, I found that you can also do it like this:

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

    button.disableProperty().bind(booleanBinding);

Solution 3

In addition to martin_dk answer, if you want to bind more than two properties you will get code like below, looks weird, but it works.

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

abstractEditor.disableProperty ().bind(booleanBinding);
Share:
17,243

Related videos on Youtube

martin_dk
Author by

martin_dk

Updated on September 15, 2022

Comments

  • martin_dk
    martin_dk over 1 year

    I have a simple fxml with a textfield and a button. I'd like to have the button disabled if the textfield is empty. So I insert something like the following in my controller:

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

    ..and that works fine. The problem is when I add a second textfield and would like my button to be disabled if either textfield is empty. What to do then? I tried the following, but that doesn't work:

    @Override
    public void initialize(URL url, ResourceBundle bundle) {
      button.disableProperty().bind(textField.textProperty().isEqualTo(""));
      button.disableProperty().bind(textField2.textProperty().isEqualTo(""));
    }
    
  • Wesos de Queso
    Wesos de Queso over 6 years
    .textProperty().isEmpty() - seems a better approach to me.
  • Menai Ala Eddine - Aladdin
    Menai Ala Eddine - Aladdin about 6 years
    I guess we use 'or' instead of 'and' ,because 'and' enables button if one of fields are not empty ,but we use 'or' to enable the button only when both of textfields are not empty.