1. ホーム
  2. java

[解決済み] JFrameのKeyListenerの無応答性

2023-06-22 06:32:32

質問

を実装しようとしています。 KeyListener を実装しようとしています。 JFrame . コンストラクタでは、次のコードを使っています。

System.out.println("test");
addKeyListener(new KeyListener() {
    public void keyPressed(KeyEvent e) { System.out.println( "tester"); }

    public void keyReleased(KeyEvent e) { System.out.println("2test2"); }

    public void keyTyped(KeyEvent e) { System.out.println("3test3"); }
});

実行すると test のメッセージがコンソールに表示されます。しかし、キーを押しても、他のメッセージは表示されず、あたかも KeyListener がそこになかったかのように、他のメッセージは表示されません。

にフォーカスが当たっていないからではないか、と考えていました。 JFrame

にフォーカスされていないため、それらの KeyListener はイベントを受信しません。 でも、確かにそうですね。

何か見落としがあるのでしょうか?

どのように解決するのですか?

keyListenerを必要なすべてのコンポーネントに追加する必要があります。フォーカスを持つコンポーネントのみがこれらのイベントを送信します。例えば、JFrame内にTextBoxが1つしかない場合、そのTextBoxにフォーカスがあります。したがって、このコンポーネントにもKeyListenerを追加する必要があります。

処理方法は同じです。

myComponent.addKeyListener(new KeyListener ...);

注意:JLabelのようにフォーカスできないコンポーネントもあります。

それらをフォーカス可能に設定するためには

myComponent.setFocusable(true);