java: 在鼠标悬停时模拟按键并按住

java: Simulate keypress and hold while mouse hovers

我正在尝试模拟按键并按住(在 java 中),同时鼠标位于按钮上方。只有当鼠标不再位于按钮上时,按键才会停止。我有按键工作,但没有按住它。做这个的最好方式是什么?我尝试了永无止境的循环,但是当鼠标退出时它不会停止(很明显)。

这是我的一些工作代码:

    buttonSD = new JButton("S+D");
    buttonSD.addMouseListener(new MouseAdapter(){
        public void mouseEntered(MouseEvent e){
            CoordsLabel.setText("Bottom Right");
                currentBtn.keyPress(KeyEvent.VK_S);
                currentBtn2.keyPress(KeyEvent.VK_D);
        }

        public void mouseExited(MouseEvent e){
            currentBtn.keyRelease(KeyEvent.VK_S);
            currentBtn2.keyRelease(KeyEvent.VK_S);
        }
    });
    c.weightx = .25;
    c.weighty = .25;
    c.gridx = 2;
    c.gridy = 2;
    gridbag.setConstraints(buttonSD, c);
    controlFrame.add(buttonSD);

    try{
        currentBtn = new Robot();
        currentBtn2 = new Robot();
    } catch (AWTException e){
        e.printStackTrace();
    }

提前致谢!

A MouseEvent e 被解雇了。要模拟按键保持,只需发送一次 keyPress,方法是添加一个名为 toggle 的变量来表示保持状态,并向每个函数添加一个监护子句:

bool toggle = 0;

public void mouseEntered(MouseEvent e){
        if (toggle == 0) {
            CoordsLabel.setText("Bottom Right");
            currentBtn.keyPress(KeyEvent.VK_S);
            currentBtn2.keyPress(KeyEvent.VK_D);
            toggle = 1;
        }
    }


public void mouseExited(MouseEvent e){
        if (toggle == 1) {
            CoordsLabel.setText("RELEASED");
            currentBtn.keyRelease(KeyEvent.VK_S);
            currentBtn2.keyRelease(KeyEvent.VK_S);
        } else {
            CoordsLabel.setText("Nope");
        }
    }

So, he can use WASD with just a mouse over.

那么您可能想要做的是在 mouseEntered 事件上启动 Swing 计时器,然后在 mouseExited 事件上停止计时器。

当计时器触发时,您只需调用按钮的 doClick() 方法。

阅读有关 How to Use Swing Timer 的 Swing 教程部分,了解更多信息和工作示例。

您还可以查看: 以获得更简单的示例。