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

JFrame の KeyListener がキーの押下に応答しないのはなぜですか?

Susan Sarandon
リリース: 2024-11-13 03:17:02
オリジナル
1078 人が閲覧しました

Why is my JFrame's KeyListener not responding to key presses?

JFrame の KeyListener が応答しない: 解決された謎

JFrame の KeyListener を実装しようとして、開発者は不可解な問題に遭遇しました。KeyListener が応答していないように見えるということです。 、キーを押してもコンソールにメッセージは表示されません。 JFrame に焦点が当てられていないのではないかと考え、開発者は支援を求めました。

慎重に調査した結果、KeyListener が実際に正しく追加されており、フォーカスが適切に設定されていることが判明しました。ただし、重要な要素が欠けていました。それは、キー イベントを KeyListener に伝播するメカニズムです。

解決策は、KeyEventDispatcher を使用することにあります。このディスパッチャは、JFrame 内の内部クラスとして定義し、KeyboardFocusManager に追加できます。ディスパッチャーのdispatchKeyEventメソッドは、keyPressed、keyrelease、keyTypedを含むすべてのキーイベントを処理します。このメカニズムを実装することで、KeyListener はキー イベントを効率的にキャプチャして応答できるようになります。

以下は、KeyEventDispatcher を組み込んだ変更されたコード サンプルです。

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);
    }
}
ログイン後にコピー

この変更により、KeyListener は次のようになります。主要なイベントを正常に受信して処理し、期待どおりの出力がコンソールに表示されます。

以上がJFrame の KeyListener がキーの押下に応答しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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