Swing プログラムを使用していますが、少し問題があります。プログラムには 2 つのウィンドウがあります (両方とも JFrames)。メイン ウィンドウは問題なく、この問題には関係ありません。
私が問題を抱えているウィンドウには、JPanel を含む JScrollPane が含まれており、JMenuBar があります。JPanel には、多数の JTextComponents (いくつかの JTextFields、いくつかの JTextAreas) があります。
私がやりたいことは、 JMenuItem にアタッチされた ActionListener に、フォーカスのある JTextComponent を見つけることです。
以前の投稿フォーカスされたコンポーネント リファレンスとHow to find the object currently has focus を見てきました。私の問題は、特定のウィンドウのgetFocusOwner()
メソッドを呼び出しても JFrame の が返されるだけでJRootPane
、まったく役に立たないことです。isFocusable()
問題の JScrollPane と JPanel はどちらも、メソッドに従ってフォーカス可能です。これは、メニュー項目をクリックする前に JTextComponents の 1 つに実際にテキストを入力した場合でも発生します。メニューなどを開いている間、カーソルはテキスト フィールドでまだ点滅します。価値があるのは、getMostRecentFocusOwner()
単に JRootPane を返すことです。