2013-11-28 43 views
9

私はテキストフィールドとボタンを持つ単純なfxmlを持っています。テキストフィールドが空の場合、ボタンを無効にしたいと思います。だから私は私のコントローラに次のようなものを挿入します:JavaFXが複数のプロパティにバインドする

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

そしてそれはうまくいきます。問題は、2番目のテキストフィールドを追加し、いずれかのテキストフィールドが空の場合にボタンを無効にしたい場合です。何をしたらいいですか?私は、次のことを試してみましたが、それは動作しません:

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

答えて

15

これが可能であるBindings経由ブール式に結合することによって:Andreysのアプローチに加えて

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

.textProperty()。isEmpty() - 私にとってはより良いアプローチです。 –

5

、私はあなたにもできることがわかりましたこのようにそれを実行します。答えをmartin_dkに加えて

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

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

、あなたは以上の2つのプロパティをバインドしたい場合は、以下のようなコードを取得する、奇妙に見えますが、それは動作します。

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

abstractEditor.disableProperty().bind(booleanBinding); 
関連する問題