【问题标题】:Java Netbeans - Key Listener doesn't workJava Netbeans - 密钥侦听器不起作用
【发布时间】:2013-09-08 02:04:04
【问题描述】:

在互联网上搜索为什么会发生这种情况并尝试以我知道的任何可能方式更改我的代码后,它仍然无法正常工作。基本上我想让我的 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 时出现。提前致谢。

【问题讨论】:

    标签: java swing netbeans jframe keylistener


    【解决方案1】:

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

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


    这完全取决于您尝试做什么、什么环境等细节。但是 AutoIt 可以监听全局按键。您可以通过多种方式之一将其绑定到您的 Java 应用程序中,但最简单的方法是通过标准输入和输出套接字相互发送消息。然后,当 AutoIt 检测到正确的按键时,它会通过ConsoleWrite(...) 向 Java 发送一条消息,Java 应用程序会通过读取它来响应,比如 Scanner。

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

    【讨论】:

    • 感谢您的快速响应。所以我唯一能做的就是让它可见。有什么办法可以隐藏窗口并使其保持焦点?我听说过 Tray,但我不知道。
    • @KubaWasilczyk:同样,如果这是我的项目,并且我在 Windows 上运行,我会使用 AutoIt。它快速、简单且可靠。
    • 我可以用 Autolt 做一个信使吗?我的意思是连接到 MySQL,进行注册、聊天和用户在线列表?
    • @KubaWasilczyk:不,我的意思是创建一个 Java 应用程序,然后是一个非常小的 AutoIt 脚本来处理全局热键功能。
    • 你能再解释一下吗?所以我可以创建 Autolt 小应用程序并将其输出与 Java 连接?
    猜你喜欢
    • 2013-12-16
    • 2013-05-16
    • 2013-04-30
    • 2022-10-17
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多