我正在尝试模拟按键并在鼠标位于按钮顶部时按住(在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();
}
提前致谢!
答案 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");
}
}