私はJavaFXプロジェクトに取り組んでいます。JavaFX でいくつかのタスクを実行する必要がありますTextField
。
たとえば、「TextField
印刷したい」の「フォーカス」イベントで
System.out.println("Textfield on focus");
「アウトフォーカス」イベントでは、印刷する必要があります
System.out.println("Textfield out focus");
監視したい TextField の FocusProperty に ChangeListener をアタッチします。
JavaFX では、プロパティが JavaFX Bean の最小定義を満たしている限り、オブジェクトが所有する可能性のある任意の JavaFX プロパティに通知イベント (変更または無効化リスナー) を添付できます。
イベント ハンドラーがキャンセルまたはデフォルト ボタンの設定の変更など、他のことを行う場合は、この投稿を参照してください。JavaFX 2 -- defaultButton プロパティの設定: 相互に排他的ですか?
Change Listener をテキスト ボックスにアタッチするコードを次に示します。
txtDx.focusedProperty().addListener(m_txtDxListener);
Listener オブジェクトはインスタンス フィールドに格納されているため、addListener() と removeListener() の両方で使用できます。有効期間が短い TextField の場合、匿名の内部クラスでリスナー オブジェクトを指定できます。
フォーカス リスナー用に作成したプライベート クラスを次に示します。
private class FocusPropertyChangeListener implements ChangeListener<Boolean> {
FocusPropertyChangeListener() { System.out.println("New FPCL instance"); }
@Override
public void changed(ObservableValue<? extends Boolean> ov,
Boolean oldb, Boolean newb) {
System.out.println("Focus change triggered");
if (ancEncEditor.isVisible() && !ancEncEditor.isDisabled()) {
boolean b = (newb != null && newb.booleanValue() == true);
System.out.println("txtDx focus change event triggered: DxAdd = " + b);
if (b) { btnDxAdd.setDefaultButton(true); }
else { btnWindowCommit.setDefaultButton(true); }
btnWindowCommit.setCancelButton(true);
btnDxAdd.setDefaultButton(b);
}
}
}