ホームページ  >  記事  >  Java  >  JFrame で KeyListener が応答しないのはなぜですか?

JFrame で KeyListener が応答しないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-11 08:56:03429ブラウズ

Why is My KeyListener Not Responding in My JFrame?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。