我试图阻止鼠标光标移动(保持光标在应用程序中心的位置),并且仍然能够处理mouseMoved
事件以便在空间旋转摄像头。我试图用java.awt.Robot.mouseMove(int x, int y)
做到这一点,但它调用mouseMoved
事件,我正在使用旋转相机,因此相机返回到前一个位置。如何在Java Swing中抓取鼠标?
1
A
回答
2
如果你只是忽略mouseMoved-机器人调用的事件?
您可以保存位置,机器人移动鼠标。如果您使用这些鼠标坐标获得鼠标事件,请忽略此事件。对我来说,这样的工作:
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
public class Test {
// position, where mouse should stay
private static final int fixX = 500;
private static final int fixY = 500;
private static Robot robo;
private static JFrame frame;
public static void main(String[] args) {
// create robot
try {
robo = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
// create default frame with mouse listener
frame = new JFrame("test frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent arg0) {
move(arg0);
}
@Override
public void mouseMoved(MouseEvent arg0) {
move(arg0);
}
});
frame.setSize(1000, 1000);
frame.setVisible(true);
}
private static void move(MouseEvent arg0) {
// check, if action was thrown by robot
if (arg0.getX() == fixX && arg0.getY() == fixY) {
// ignore mouse action
return;
}
// move mouse to center (important: position relative to frame!)
robo.mouseMove(fixX + frame.getX(), fixY + frame.getY());
// compute and print move position
int moveX = arg0.getX() - fixX;
int moveY = arg0.getY() - fixY;
System.out.println("moved: " + moveX + " " + moveY);
}
}
鼠标停留在500/500,你让你的鼠标移动,但你有时会看到鼠标跳跃,因为机器人是不够快。
也许你可以隐藏系统光标(How to hide cursor in a Swing application?)并绘制自己的光标。
+0
谢谢,这个解决了我的问题。你的链接对我也很有用。 – Dimansel
相关问题
- 1. 如何在Windows上抓取鼠标
- 2. 如何让鼠标光标在鼠标上抓取?
- 3. 在Java Swing中嵌入鼠标输入
- 4. 如何在屏幕抓取中捕获鼠标光标?
- 5. 如何在Java Swing中使用鼠标平移图像
- 6. Java Swing中的鼠标指针问题
- 7. 在拖动鼠标时Java Swing重绘
- 8. 如何在抓取的截图上绘制鼠标光标?
- 9. 使用Java Swing进行网页抓取
- 10. 在Java中定制鼠标光标绘图(swing)
- 11. 如何检查在Swing中是否按下鼠标按钮以及在Swing中按下哪个鼠标按钮
- 12. java swing按住两个鼠标按钮
- 13. Java swing:如何检测鼠标何时静止
- 14. Java Swing,如何使用鼠标调整JPanel大小?
- 15. 如何抓住div移动鼠标?
- 16. 增加WPF GridSplitter鼠标抓取阈值
- 17. SDL2鼠标抓取不起作用
- 18. Java Swing - 获取鼠标悬停的对象
- 19. 在Java swing中的菜单项上使用鼠标监听器
- 20. Java swing在鼠标拖放中绘制矩形
- 21. 按钮在Java GUI(Swing)中使用鼠标后即可使用?
- 22. Java swing“在后台工作”鼠标光标
- 23. 如何在java中获取鼠标中键?
- 24. 在java中拾取pascal鼠标移动
- 25. 获取鼠标的DX/DY在Java中
- 26. 抓住鼠标移动
- 27. 如何在swing应用程序中获取鼠标指针组件
- 28. Swing中的鼠标事件处理
- 29. 如何在Linux中读取鼠标和鼠标按下事件?
- 30. 如何在Java中获取鼠标按钮状态?
你可以做两个if语句:if(mouseX> centerX)'和'else if(x