1

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

4

1 回答 1

2

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

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


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

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

于 2013-09-08T02:06:56.247 回答