Java Netbeans - Key Listener 不起作用

标签 java swing netbeans jframe keylistener

在互联网上搜索发生这种情况的原因并尝试以我知道的任何可能的方式更改我的代码后,它仍然不起作用。基本上我想让我的 JFrame 在按住 Shift 时出现。这是我的代码:

public DesktopMenu() {
    initComponents();
    setFocusable(true);

    //Listening to the mouse movement to change position of the window
    this.addMouseMotionListener(new MouseAdapter(){
        @Override
        public void mouseMoved(MouseEvent e){
            xPos = e.getX();
            yPos = e.getY();
            setLocation((e.getXOnScreen()-xPos),(e.getYOnScreen()-yPos));
        }
    });
    //This should listen to the key, when it's pressed window just appear.
    this.addKeyListener(new KeyListener(){
        @Override
        public void keyPressed(KeyEvent e){
            if(e.getKeyCode() == KeyEvent.VK_SHIFT){
                setVisible(true);
            }else{
                setVisible(false);
            }
        };
        @Override
        public void keyReleased(KeyEvent e) {
        }

        @Override
        public void keyTyped(KeyEvent e) {
        }
    });
}

我使用 new DesktopMenu().setVisible(false); 在标准 Java 类中运行窗口,因为我想让它在按住 SHIFT 时显示。提前致谢。

最佳答案

如果您搜索过 KeyListener,您会发现最常见的问题之一(除了 Swing 应用程序通常应避免的问题之外)是,如果监听的组件不工作,它们将无法工作没有焦点。那么您遇到的问题类似,但规模更大:如果监听的应用程序没有焦点,甚至不可见,则 KeyListener 将无法工作。

简而言之,您想要做的事情无法在核心 Java 中完成。如果您在 Windows 环境中运行,请考虑使用另一个可以为您执行此操作的实用程序,例如 AutoIt。

<小时/>

这一切都取决于您想要执行的操作的详细信息、环境等等。但 AutoIt 可以监听全局按键。您可以通过多种方式之一将其绑定(bind)到 Java 应用程序中,但最简单的方法是通过标准输入和输出套接字相互发送消息。然后,当 AutoIt 检测到正确的按键时,它会通过 ConsoleWrite(...) 向 Java 发送一条消息,而 Java 应用程序会通过读取该消息(例如扫描仪)来响应。

我确实知道我永远不会使用 Shift 键作为热键,因为这会使用户的计算机完全无法运行。

关于Java Netbeans - Key Listener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18679702/

相关文章:

java - 为什么 resolve dependencies 'classpath' 这么慢?

java - hibernate spring 与最新版本的集成

java - 使用 GridBagLayout 设置坐标

java - 系统输出,系统错误 : often temporary debugging statements warning

java - 并发-如何启动一个线程,然后启动另一个线程,并且当线程 2 运行时第一个线程保持运行?

java - 无需路由器的 WiFi 网络

java - JTable-调整行大小时调整行标题大小

java - 使用按钮增加或减少 Swing 计时器速度?

java - 如何在 Netbeans 中连接到我的数据库

java - Netbeans 告诉我,当一个值是 int 时,它就是 boolean 值