質問: KeyEvent.VK_ENTER){ System.out.println("2222"); } } } /** * 描画処理 */ @Override protected void paintComponent(Graphics g){ super.paintComponent(g); requestFocusInWindow(); } } ``` 上のプログラムは 基盤となるパネルを作って、そこにPanel1,Panel2をつけ加えています。 Panel1とPanel2それぞれキー入力処理を行っていて、Panel1において右矢印キーを押せば"1111"が出力され、Panel2においてEnterキーを押せば"2222"が出力されるようにしています。 ですが実行すると、右矢印を押して"1111"は出力されるのですが、Enterキーを押しても何も反応しませんでした。 なぜそうなるのでしょうか? 2つのパネル同時にキー入力処理はできないのでしょうか?
回答: 問題の現象は過去の質問(JPanelでkey入力を取得したい)と同じでしょう。 「フォーカスの当たっているコンポーネントでしか処理しない」ということです。 > > ※APIリファレンス・クラスComponent・processKeyEventの記述より > > DefaultKeyboardFocusManagerは、フォーカスの所有者でないか、または表示されていないComponentにキー・イベントをディスパッチしません。 > > > 私が試した環境では、Panel2のrequestFocusInWindowメソッドの後に、Panel1のrequestFocusInWindowメソッドが実行されました。 このため、Panel2からPanel1へとフォーカスが移動し、Panel1のprocessKeyEventメソッドが実行されます。 試しに、Panel1のrequestFocusInWindowメソッドをコメントアウトすれば、Panel2のprocessKeyEventが実行されます。