1. ホーム
  2. java

[解決済み] JPanelがKeyListenerイベントに応答しない

2022-02-14 20:46:25

質問

のサブクラスがあります。 JFrame から拡張されたクラスを使用しています。 JPanel

public class HelloWorld extends JPanel implements KeyListener

のオブジェクトを追加しています。 HelloWorld をフレームに追加します。 app.add(helloWorld); . 今、私が任意のキーボードキーを押したとき、そのキーは KeyListener メソッドが呼び出され、どうやら helloWorld にはウィンドウフォーカスがありません。また helloWorld.requestFocusInWindow(); が、やはり反応しない。

どうすればキーを押したときに反応するようになりますか?

解決方法は?

を設定しましたか? KeyListener を使用します。 HelloWorld パネルは、そのパネルそのものでしょうか?また、おそらくそのパネルをフォーカス可能に設定する必要があります。私はこのコードでそれをテストし、それがそうであるように動作しているようです。

class HelloWorld extends JPanel implements KeyListener{
    public void keyTyped(KeyEvent e) {
        System.out.println("keyTyped: "+e);
    }
    public void keyPressed(KeyEvent e) {
        System.out.println("keyPressed: "+e);
    }
    public void keyReleased(KeyEvent e) {
        System.out.println("keyReleased: "+e);
    }
}

class MyFrame extends JFrame {
    public MyFrame() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(200,200);

        HelloWorld helloWorld=new HelloWorld();

        helloWorld.addKeyListener(helloWorld);
        helloWorld.setFocusable(true);

        add(helloWorld);
        setVisible(true);
    }
    public static void main(String[] args) {
        new MyFrame();
    }
}