如何在没有按钮或文本区域的情况下使用KeyListener?

问题描述 投票:0回答:1

我正在使用Java Swing编写游戏程序,希望直接从键盘获得用户的移动响应,而不是让他们按下按钮。但是我发现的所有教程都需要将动作与按钮绑定,然后将动作与按钮关联。

有没有一种方法可以让程序只按一下键就可以响应?

java swing keylistener
1个回答
0
投票

您可以使用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);
© www.soinside.com 2019 - 2024. All rights reserved.