Java Netbeans - 密钥监听器不起作用

时间:2013-09-08 02:04:05

标签: java swing netbeans jframe keylistener

在互联网上搜索为什么会发生这种情况并尝试以我知道的任何可能的方式更改我的代码,它仍然无法正常工作。基本上我想让换档保持时我的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) {
        }
    });
}

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

1 个答案:

答案 0 :(得分:2)

如果您已经搜索过KeyListeners,您会发现最常见的问题之一(除了Swing应用程序通常应该避免的问题之外),如果组件成功,它们将无法工作被倾听的并没有焦点。那么你遇到的问题是类似的,但是规模更大:如果应用程序听了没有关注并且没有关注,KeyListener将无法工作甚至可见。

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


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

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

相关问题