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 教程部分,了解更多信息和工作示例。
您还可以查看: 以获得更简单的示例。
我正在尝试模拟按键并按住(在 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 教程部分,了解更多信息和工作示例。
您还可以查看: