JavaFX绑定到多个属性

时间:2013-11-28 11:08:24

标签: java binding javafx

我有一个带文本字段和按钮的简单fxml。如果textfield为空,我想禁用该按钮。所以我在控制器中插入如下内容:

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

..而且工作正常。问题是当我添加第二个文本字段并希望如果任一文本字段为空时我的按钮被禁用。该怎么办?我尝试了以下方法,但这不起作用:

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

3 个答案:

答案 0 :(得分:20)

这可以通过Bindings

绑定到布尔表达式来实现
button.disableProperty().bind(
    Bindings.and(
        textField.textProperty().isEqualTo(""),
        textField2.textProperty().isEqualTo("")));

答案 1 :(得分:7)

除了Andreys的方法,我发现你也可以这样做:

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

    button.disableProperty().bind(booleanBinding);

答案 2 :(得分:4)

除了martin_dk的答案,如果你想绑定两个以上的属性,你会得到如下的代码,看起来很奇怪,但它确实有效。

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

abstractEditor.disableProperty ().bind(booleanBinding);