我正在使用Java Swing编写游戏程序,希望直接从键盘获得用户的移动响应,而不是让他们按下按钮。但是我发现的所有教程都需要将动作与按钮绑定,然后将动作与按钮关联。
有没有一种方法可以让程序只按一下键就可以响应?
您可以使用AWTEventListeners。他们正在捕获任何事件,无论最终将由哪个组件接收(不需要监听任何组件,我在JLabel
中使用一个JFrame
对它进行了测试。)>
这是一个小示例,它在移动键/鼠标和鼠标坐标时打印键代码。如果按下ESCAPE
,也会退出应用程序:
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
@Override
public void eventDispatched(AWTEvent event) {
if(event instanceof KeyEvent){
KeyEvent keyEvent = (KeyEvent) event;
if(keyEvent.getID() == KeyEvent.KEY_PRESSED){
System.out.println("Key pressed: " + keyEvent.getKeyCode());
if(keyEvent.getKeyCode() == KeyEvent.VK_ESCAPE){
System.exit(0);
}
}
}else if(event instanceof MouseEvent){
MouseEvent mouseEvent = (MouseEvent) event;
if(mouseEvent.getID() == MouseEvent.MOUSE_PRESSED){
System.out.println("Mouse pressed: " + mouseEvent.getButton());
}else if(mouseEvent.getID() == MouseEvent.MOUSE_MOVED){
System.out.println("Mouse moved to " + mouseEvent.getXOnScreen() + "/" + mouseEvent.getYOnScreen());
}
}
}
}, AWTEvent.KEY_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK + AWTEvent.MOUSE_MOTION_EVENT_MASK);