、することができます各TextField
のフォーカスプロパティへデリゲート。 2つのインスタンス、インスタンスメソッドisFocused()
の
private final TextField tf1 = new TextField("One");
private final TextField tf2 = new TextField("Two");
実装を考えることは、次に簡単である:効果を確認するためにhereを示すよう
private boolean isFocused() {
return tf1.isFocused() | tf2.isFocused();
}
フォーカスリスナーを追加します。
tf1.focusedProperty().addListener((Observable o) -> {
System.out.println(isFocused());
});
tf2.focusedProperty().addListener((Observable o) -> {
System.out.println(isFocused());
});
これは行うことはできません。全体的な問題は、isFocused()
がで、Node
であることです。
あなたがCustomControl
でisFocused()
を上書きしたかったようだが、それはfinal
方法は不可能であり、それがフォーカスを有する単一コンポーネントの概念に反します。 CustomControl
はコンポジットなので、内部的にフォーカスを管理する必要があります。 ListView
に示すように、カスタムFocusModel
を使用することができます。あなたはこの集約フォーカスプロパティを聴取することができるクライアント側で今
public BooleanBinding aggregatedFocusProperty() {
return Bindings.or(field1.focusedProperty(), field2.focusedProperty());
}
:
[* FocusListener for JavaFX Nodes *](https://stackoverflow.com/q/21798183/230513)を参照してください。 – trashgod
@trashgodこの投稿はフォーカスリスナーをつけることについてです。それは私の問題ではない。私はこれらの2つのテキストフィールドによって作成されるCustomControlを持っています。その葉のいずれかに焦点が当てられている場合、焦点が合っていると考えられる樹木について考えてみてください。 – MarcG
下記のように、委任を使用できると思います。 – trashgod