JFrame の KeyListener が応答しない: KeyEventDispatcher の使用
フォーカスが JFrame にない可能性があるため、KeyListener が応答しなくなります。これに対処するには、別の KeyEventDispatcher を KeyboardFocusManager に追加することを検討してください。
次のコード例では、MyDispatcher クラスが定義され、KeyboardFocusManager に追加されます。
public class MyFrame extends JFrame { private class MyDispatcher implements KeyEventDispatcher { @Override public boolean dispatchKeyEvent(KeyEvent e) { if (e.getID() == KeyEvent.KEY_PRESSED) { System.out.println("tester"); } else if (e.getID() == KeyEvent.KEY_RELEASED) { System.out.println("2test2"); } else if (e.getID() == KeyEvent.KEY_TYPED) { System.out.println("3test3"); } return false; } } public MyFrame() { add(new JTextField()); System.out.println("test"); KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); manager.addKeyEventDispatcher(new MyDispatcher()); } public static void main(String[] args) { MyFrame f = new MyFrame(); f.pack(); f.setVisible(true); } }
このディスパッチャーはすべてのキーを処理します。コンポーネントのフォーカスに関係なくイベントを処理し、メッセージをコンソールに出力します。このアプローチにより、フォーカスが直接 JFrame にない場合でも、KeyListener がキーボード入力を確実に受け取ることができます。
以上がJFrame で KeyListener が応答しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。