2009-04-06 5 views

答えて

29

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

1

Thisチュートリアルでは、フォーカスを理解することはかなり助けになるはずです。

0

すべてのJComponentは、あなたがそれにフォーカスしているかどうかを確認するために使用することができますhasFocus方法があります。 しかし、これは変更されました。そして、あなたはisFocusOwnerを使うべきです。

だからあなたのフレーム内のすべてのテキストフィールド上で実行し、それがそのメソッドを呼び出すことによってisFocusOwnerある場合は、それらのそれぞれに確認してください。

また、フレームを介してフォーカスの所有者を得ることができます。

+7

本当に非効率的と思われます。 KeyboardFocusManager.getCurrentKeyboardFocusManager()。getFocusOwner();を呼び出すことができます。 –

2

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

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

23
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() 
+1

私は実際に使用しているウィンドウにアクセスできない静的なクラスからこれを行うことができるので、私はすべてのウィンドウをループする必要はありません。 –

1

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

+0

大丈夫、api docを読んで(私は:-)あなたが何を意味するかを理解するのに役立ちます。スコープが保護されているため、呼び出し元のスレッドがフォーカスの所有者とは異なるコンテキストにあっても、フォーカスを所有者に戻します。アプリケーションコードでは使用できません。内部でのみ使用されています... – kleopatra

+1

スイングはシングルスレッド環境です。すべてのUIインタラクションは、イベントディスパッチスレッドのコンテキスト内で発生しなければなりません。異なるスレッドで動作する同じJVM内に2つのウィンドウを持つことは不可能です。 APIの動作 – MadProgrammer

関連する問題