我正在使用Java进行一些Swing GUI工作,我认为我的问题相当简单;如何设置鼠标的位置?
答案 0 :(得分:21)
正如其他人所说,这可以使用Robot.mouseMove(x,y)
来实现。但是,当在多监视器情况下工作时,此解决方案会出现故障,因为机器人使用主屏幕的坐标系,除非您另有指定。
这是一个允许您传递任何基于点的全局屏幕坐标的解决方案:
public void moveMouse(Point p) {
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();
// Search the devices for the one that draws the specified point.
for (GraphicsDevice device: gs) {
GraphicsConfiguration[] configurations =
device.getConfigurations();
for (GraphicsConfiguration config: configurations) {
Rectangle bounds = config.getBounds();
if(bounds.contains(p)) {
// Set point to screen coordinates.
Point b = bounds.getLocation();
Point s = new Point(p.x - b.x, p.y - b.y);
try {
Robot r = new Robot(device);
r.mouseMove(s.x, s.y);
} catch (AWTException e) {
e.printStackTrace();
}
return;
}
}
}
// Couldn't move to the point, it may be off screen.
return;
}
答案 1 :(得分:20)
您需要使用Robot
此类用于生成本机系统输入事件,以用于测试自动化,自运行演示以及需要控制鼠标和键盘的其他应用程序。 Robot的主要目的是促进Java平台实现的自动化测试。
使用类生成输入事件不同于将事件发布到AWT事件队列或AWT组件,因为事件是在平台的本机输入队列中生成的。例如,
Robot.mouseMove
实际上会移动鼠标光标,而不仅仅是生成鼠标移动事件......
答案 2 :(得分:7)
答案 3 :(得分:4)
答案 4 :(得分:2)
查看Robot课程。
答案 5 :(得分:0)
代码本身如下:
char escCode = 0x1B;
System.out.print(String.format("%c[%d;%df",escCode,row,column));
此代码本身并不完整,因此我建议将其放在方法中并调用类似“ positionCursor(int row,int column)”的名称。
以下是完整的代码(方法和代码):
void positionCursor(int row, int column) {
char escCode = 0x1B;
System.out.print(String.format("%c[%d;%df",escCode,row,column));
}