JavaFX bind to multiple properties

2020-05-25 17:57发布

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(""));
}

3条回答
Emotional °昔
2楼-- · 2020-05-25 18:31

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);
查看更多
3楼-- · 2020-05-25 18:33

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

button.disableProperty().bind(
    Bindings.and(
        textField.textProperty().isEqualTo(""),
        textField2.textProperty().isEqualTo("")));
查看更多
Anthone
4楼-- · 2020-05-25 18:37

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);
查看更多
登录 后发表回答