3

テキスト フィールドに何かが含まれているかどうかに基づいてボタンを有効または無効にしたいと考えており、プロパティ バインディングを使用してこれを実装したいと考えています。

最初に、テキスト フィールドの text プロパティで isEmpty() メソッドを使用して、ボタンの disabled プロパティのブール値バインディングを作成しました。

startSearchButton.disableProperty().bind(searchField.textProperty().isEmpty());

バインディングは機能しますが、「テキスト フィールドに何かが含まれる」という私の定義は、 isEmpty() メソッドが行うものとは異なります。つまり、テキストの長さが > 0 であるかどうかをチェックするだけです。しかし、「実際の」テキストがあるかどうかに興味があります。 、つまり、テキスト フィールドが空白かどうか(空ではないだけでなく、実際には空白だけではない)。

残念ながら isBlank() メソッドはありません。また、Bindings ユーティリティ クラスにも適切なものが見つかりませんでした。Bindings.createBooleanProperty メソッドを使用して好きなカスタム ブール プロパティを実装できることがわかりましたが、カスタム バインディングを定義するという概念にはまだ慣れていません。私の場合、そのようなブール値のプロパティをどのように実装する必要がありますか?

4

2 に答える 2

9

(多くの方法の中で) を使用して、カスタム バインディングを作成できますBindings.createBooleanBinding(...)。最初の引数は、バインディングの値を計算する関数です (テキストから空白を削除してtrim()、結果が空かどうかを確認できます)。残りの引数は、バインディングの再計算をトリガーするオブザーバブルのリストです。テキストフィールドのテキストが変更されたときにバインディングを再計算したいので、 text プロパティを指定するだけです:

startSearchButton.disableProperty().bind(Bindings.createBooleanBinding(() -> 
    searchField.getText().trim().isEmpty(),
    searchField.textProperty());
于 2016-03-11T19:27:23.970 に答える