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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-11-13 13:25:02512ブラウズ

Why Isn't My JFrame's KeyListener Responding?

JFrame の KeyListener が応答しない: キーボードの対話性のロックを解除する

JFrame に KeyListener を実装しようとしているときに、次のような複雑な問題に遭遇しました。 KeyListener は適切に動作しているにもかかわらず、応答していないようです

フォーカスの難題

フォーカスが JFrame にないという最初の疑念は、よくある誤解です。デフォルトでは、JFrame が表示されるとフォーカスが設定されます。ただし、JFrame で requestFocus() を呼び出して再確認する価値があります。

KeyEventDispatcher の紹介

フォーカスが原因ではない場合は、KeyEventDispatcher の使用を検討してください。この強力なメカニズムにより、どのコンポーネントにフォーカスがあるかに関係なく、主要なイベントをキャプチャできます。

サンプル コード

次のコード スニペットは、KeyEventDispatcher を JFrame に追加する方法を示しています。

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

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