以下是我的代码的简化版
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.你能看到任何问题吗?
非常感谢。
答案 0 :(得分:1)
如果向类中添加侦听器,则此类必须实现侦听器接口才能获取通知:
public class StateController extends GraphicsProgram implements MouseListener, KeyListener
或者您即时进行:
yourUiElement.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyPressed(KeyEvent e) {
System.out.println(x);
}
});
答案 1 :(得分:1)
假设您的代码实际编译并且您正确实现了KeyListener接口,则仅将KeyEvents分派给具有焦点的组件。你的StateController没有焦点。
默认情况下,JPanel无法调焦。所以我猜你的StateController类正在扩展JPanel。所以你需要:
setFocusable(true)
使面板具有焦点
panel.requestFocusInWindow()
。您只能请求关注可见GUI中的组件。