Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Netbeans-密钥侦听器不';行不通_Java_Swing_Netbeans_Jframe_Keylistener - Fatal编程技术网

Java Netbeans-密钥侦听器不';行不通

Java Netbeans-密钥侦听器不';行不通,java,swing,netbeans,jframe,keylistener,Java,Swing,Netbeans,Jframe,Keylistener,在互联网上搜索了它发生的原因并试图以我知道的任何可能的方式修改我的代码后,它仍然不起作用。基本上,我希望在按住shift键时显示JFrame。这是我的密码: public DesktopMenu() { initComponents(); setFocusable(true); //Listening to the mouse movement to change position of the window this.addMouseMotionListene

在互联网上搜索了它发生的原因并试图以我知道的任何可能的方式修改我的代码后,它仍然不起作用。基本上,我希望在按住shift键时显示JFrame。这是我的密码:

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键时显示。提前感谢。

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

简而言之,您试图做的事情无法在核心Java中完成。考虑使用另一个可以为您这样做的实用程序,例如在Windows环境下运行的AutoIt。< /P>
这一切都取决于你想做什么的细节,什么样的环境,等等。但AutoIt可以收听全球按键。您可以通过以下几种方式之一将其绑定到Java应用程序中,但最简单的方法是通过标准的输入和输出套接字相互发送消息。然后,当AutoIt检测到正确的按键时,它会通过
控制台写入(…)
向Java发送一条消息,Java应用程序会通过(比如扫描仪)读取该消息进行响应


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

感谢您的快速回复。所以我唯一能做的就是让它可见。有没有办法隐藏窗口并使其保持聚焦?我听说过Tray,但我不知道。@KubaWasilczyk:再说一次,如果这是我的项目,并且我在Windows上运行,我会使用AutoIt。它快速、简单、可靠。我能用Autolt信使吗?我的意思是连接到MySQL,创建注册、聊天和用户在线列表?@KubaWasilczyk:不,我的意思是创建一个Java应用程序,然后创建一个非常小的AutoIt脚本来处理全局热键功能。你能给我解释一下吗?所以我可以创建Autolt小应用程序,并用Java连接它的输出?