【发布时间】:2013-09-01 01:03:30
【问题描述】:
我刚刚编写了一些小代码,试图让我的 KeyEvent 管理器工作。
如您所见,我创建了一个 JFrame 并添加了 gameComponent,它是 Game 类的一个对象。我将 JPanel 设置为可聚焦并请求焦点。然后将一个名为 TAdapter 的 KeyAdapter 设置为 KeyAdapter。您可以在其扩展 KeyAdapter 和方法 keyPressed() 的代码中看到该类。
我告诉程序在按下一个键时将“按下”打印到我的控制台,但没有任何反应。
我无法弄清楚我做错了什么,也许有人看到了一些我自己看不到的错误?
感谢任何帮助
提前致谢
public class Game extends JPanel {
public static final int WIDTH = 320;
public static final int HEIGHT = 240;
public static final int SCALE = 3;
public Game() {
addKeyListener(new TAdapter());
setFocusable(true);
requestFocus();
}
public static void main(String[] args) {
Game gameComponent = new Game();
Dimension size = new Dimension(WIDTH*SCALE, HEIGHT*SCALE);
JFrame frame = new JFrame("Invaders");
frame.setVisible(true);
frame.setSize(size);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.add(gameComponent);
}
public class TAdapter extends KeyAdapter {
public void keyPressed(KeyEvent e) {
System.out.println("Pressed");
}
}
}
【问题讨论】:
-
测试了你的代码,它运行良好。
-
可能是按钮被某些东西混淆了,或者窗口没有焦点?
-
可能是我的键盘有问题。我正在使用附带的 Type Cover 在我的 Surface Pro 上编写代码,而在我的另一台电脑上,这段代码总是像魅力一样工作。谢谢
-
camickr 答案是正确的,如果您阅读 api,它会说您不必调用
requestFocus而是使用requestFocusInWindow()但不会做任何事情并返回错误,因为面板不是focusable,所以不要使用KeyBinding