1

我正在编写一个简单的 java 蛇类游戏,甚至在我真正开始制作游戏之前就遇到了问题。由于某种原因,我似乎无法从键盘获得输入。我目前的代码是:

public class GameWindow extends JFrame{    


private SnakeCanvas snakeCanvas;


public GameWindow(StartWindow sw) {
    getContentPane().addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            JOptionPane.showMessageDialog(null, "Key Pressed!");
        }
    });


    getContentPane().setBackground(Color.BLACK);

    this.setExtendedState(JFrame.MAXIMIZED_BOTH);
    this.setUndecorated(true);
    this.setVisible(true);
    getContentPane().setLayout(null);

    snakeCanvas = new SnakeCanvas();
    snakeCanvas.setBounds(78, 72, 290, 195);
    getContentPane().add(snakeCanvas);
    snakeCanvas.setVisible(true);
    snakeCanvas.repaint();

}


}

(一个 SnakeCanvas 扩展了 JPanel 并且上面没有其他组件)

我还尝试向snakeCanvas 添加一个关键侦听器,但仍然没有效果.. 我也尝试过使用可聚焦和聚焦遍历的东西,但这也没有做任何事情......任何人都可以向我解释我做错了什么?

4

2 回答 2

3

确保您已将要接收键盘事件的组件设置为可聚焦 ( setFocusable) 且具有焦点 ( requestFocus)

于 2012-08-03T10:17:11.377 回答
2
  1. KeyListener不是Swing JComponents的正确监听器,需要在窗口中获得焦点

  2. 你必须setFocusable为容器

  3. 正确和正确的方法是使用KeyBindings例如

于 2012-08-03T10:16:33.493 回答