web-dev-qa-db-ja.com

現在フォーカスされているオブジェクトを見つける方法

TextFieldにいくつかのFramesがあります。どのTextFieldが現在フォーカスされているか知りたいです。どうすればこの情報を見つけることができますか?

26

JFrame.getFocusOwner()Window.getFocusOwner() から継承)は、フォーカスのあるコンポーネントへの参照を返す必要があります。 getMostRecentFocusOwner()も興味深いかもしれません。

31
Rob
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
29
Peter Tseng

javax.swing.FocusManager もご覧ください。

3

getFocusOwner()は、現在フォーカスされている子コンポーネントを返します。

ただし、それがJTextFieldであるかどうかを確認する必要があります。ボタンのような他のコンポーネントも、フレーム内に存在する場合はフォーカスされる場合があります。

2
euphoria83

KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
スレッド間で機能しません。したがって、アプリが新しいスレッドを呼び出し、そのスレッドに独自のフレーム/ウィンドウなどがある場合、そのスレッドからフォーカス所有者を取得することはできません。代わりに:KeyboardFocusManager.getCurrentKeyboardFocusManager().getGlobalFocusOwner();

1
Scouser

これ チュートリアルは、フォーカスを理解するのにかなり役立つはずです。

1
Mitch Flax

すべてのJComponentには、フォーカスがあるかどうかを確認するために使用できるhasFocusメソッドがあります。ただし、これは変更されているため、isFocusOwnerを使用する必要があります。

したがって、フレーム内のすべてのテキストフィールドを実行し、そのメソッドを呼び出して、isFocusOwnerかどうかをチェックします。

フレームを通じてフォーカスの所有者を取得することもできます。

1
Uri

キーボードフォーカスマネージャーで適切なプロパティの変更をリッスンすることもできます。

KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener("focusOwner", new PropertyChangeListener() {
    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        System.out.println(evt.getNewValue());
    }
});

これは、Swingコンポーネントを操作するときにフォーカスの所有者を出力し、一般的なフォーカスの問題のデバッグに役立ちます。

1
predi