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

时间:2016-06-25 18:57:36

标签: java hover keypress

我正在尝试模拟按键并在鼠标位于按钮顶部时按住(在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();
    }

提前致谢!

2 个答案:

答案 0 :(得分:1)

  

所以,他只需要用鼠标就可以使用WASD。

那么你可能想要做的是在mouseEntered事件上启动一个Swing Timer,然后在mouseExited事件上停止Timer。

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

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

您还可以查看:Update a Label with a Swing Timer以获得更简单的示例。

答案 1 :(得分:0)

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");
        }
    }