ホームページ > Java > &#&チュートリアル > JFrame で KeyListener が応答しないのはなぜですか?

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

Linda Hamilton
リリース: 2024-11-11 08:56:03
オリジナル
452 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート