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