这是我的代码的简化版本
public class StateController extends GraphicsProgram {
public Menu menu = new Menu();
public void run() {
addMouseListeners();
addKeyListeners();
}
}
public class Menu {
int x = 0;
public void keyPressed(KeyEvent e) {
System.out.println(x);
}
public void mousePressed(MousEvent e) {
System.out.println(x);
}
}
程序会检测鼠标何时被按下,但当按下某个键时它不会打印 X。你能看出什么问题吗?
非常感谢。
最佳答案
假设您的代码实际编译并且您正确实现了 KeyListener 接口(interface),则 KeyEvent 只会分派(dispatch)到具有焦点的组件。您的 StateController 没有焦点。
默认情况下,JPanel 不可聚焦。所以我猜你的 StateController 类正在扩展 JPanel。所以你需要:
- 通过在类的构造函数中使用
setFocusable(true)
使面板可聚焦 - 在 GUI 可见后调用
panel.requestFocusInWindow()
。您只能请求关注可见 GUI 中的组件。
关于java - KeyListener 不起作用,但 Mousepressed 起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27508525/