55

私はJavaFXプロジェクトに取り組んでいます。JavaFX でいくつかのタスクを実行する必要がありますTextField

たとえば、「TextField印刷したい」の「フォーカス」イベントで

System.out.println("Textfield on focus");

「アウトフォーカス」イベントでは、印刷する必要があります

System.out.println("Textfield out focus");
4

4 に答える 4

9

監視したい 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);
        }
    }
}
于 2013-05-14T17:41:12.213 に答える