我正在编写一个简单的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中添加一个关键的监听器,但仍然没有效果。 我也尝试过使用焦点和焦点遍历的东西,但也没有做任何事...... 任何人都可以向我解释我做错了什么?
答案 0 :(得分:3)
确保您已设置要接收键盘事件的组件是可调焦的(setFocusable
)&有焦点(requestFocus
)
答案 1 :(得分:2)
KeyListener不是Swing JComponents的正确聆听者,需要在窗口中关注
您需要setFocusable
容器
正确而正确的方法是使用KeyBindings,for example