TextField
にいくつかのFrame
sがあります。どのTextField
が現在フォーカスされているか知りたいです。どうすればこの情報を見つけることができますか?
JFrame.getFocusOwner()
( Window.getFocusOwner()
から継承)は、フォーカスのあるコンポーネントへの参照を返す必要があります。 getMostRecentFocusOwner()
も興味深いかもしれません。
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
javax.swing.FocusManager もご覧ください。
getFocusOwner()は、現在フォーカスされている子コンポーネントを返します。
ただし、それがJTextFieldであるかどうかを確認する必要があります。ボタンのような他のコンポーネントも、フレーム内に存在する場合はフォーカスされる場合があります。
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
;
スレッド間で機能しません。したがって、アプリが新しいスレッドを呼び出し、そのスレッドに独自のフレーム/ウィンドウなどがある場合、そのスレッドからフォーカス所有者を取得することはできません。代わりに:KeyboardFocusManager.getCurrentKeyboardFocusManager().getGlobalFocusOwner();
これ チュートリアルは、フォーカスを理解するのにかなり役立つはずです。
すべてのJComponentには、フォーカスがあるかどうかを確認するために使用できるhasFocusメソッドがあります。ただし、これは変更されているため、isFocusOwnerを使用する必要があります。
したがって、フレーム内のすべてのテキストフィールドを実行し、そのメソッドを呼び出して、isFocusOwnerかどうかをチェックします。
フレームを通じてフォーカスの所有者を取得することもできます。
キーボードフォーカスマネージャーで適切なプロパティの変更をリッスンすることもできます。
KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener("focusOwner", new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println(evt.getNewValue());
}
});
これは、Swingコンポーネントを操作するときにフォーカスの所有者を出力し、一般的なフォーカスの問題のデバッグに役立ちます。