2013-11-28 152 views
9

我有一个简单的带有文本框和按钮的fxml。如果文本框为空,我希望禁用该按钮。所以我在我的控制器中插入如下内容:JavaFX绑定到多个属性

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

..并且工作正常。问题是当我添加第二个文本字段,并希望我的按钮被禁用,如果任何文本字段为空。那么该怎么办?我尝试以下,但不工作:通过Bindings

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

回答

15

这可能是通过结合一个布尔表达式:

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

.textProperty()。isEmpty() - 对我来说似乎是一个更好的方法。 –

5

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

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

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

除了martin_dk回答,如果要绑定两个以上的属性,你会得到像下面的代码,看起来怪异,但它的作品。

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

abstractEditor.disableProperty().bind(booleanBinding);