11

JPanel クラスの KeyListener を使用して、矢印キーの 1 つが押されたときに何かをしようとしています。これが私のコードです:

public class TestPanel extends JPanel implements KeyListener{

    public TestPanel(){
        this.addKeyListener(this);
        this.setFocusable(true);
        this.requestFocusInWindow();
    }

    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            System.out.println("Right");

        }

        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            System.out.println("Left");
        }

    }

    public void keyTyped(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}
}

メイン メソッドは、このパネルの新しいインスタンスをフレームに追加して表示します。キーリスナーを JFrame に追加する必要がありますか? 私の場合、これは難しく効率が悪いので、できればこのJPanelで動作させたいと思っています。私が間違っていることを知っている人はいますか?

編集:どちらも機能しないキーバインディングコード:

public class GamePanel extends JPanel implements ActionListener{

//Constructor
public GamePanel(){

    setupKeyBinding();
    this.setFocusable(true);
    this.requestFocusInWindow();


}

private void setupKeyBinding() {
    int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
    InputMap inMap = getInputMap(condition);
    ActionMap actMap = getActionMap();

    inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "Left");
    actMap.put("Left", new leftAction());
}

private class leftAction extends AbstractAction {

       public void actionPerformed(ActionEvent e) {
          System.out.println("test");
       }
}

public void actionPerformed(ActionEvent e) {
    //some other game info
}
} 

なぜこれがうまくいかないのか誰か教えてもらえますか?(私の 2 番目のアクション リスナーは、ゲームに必要な他のもの用です)

4

4 に答える 4