Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中设置鼠标的位置?_Java_User Interface_Swing_Mouse - Fatal编程技术网

如何在Java中设置鼠标的位置?

如何在Java中设置鼠标的位置?,java,user-interface,swing,mouse,Java,User Interface,Swing,Mouse,我正在用Java做一些Swing GUI工作,我认为我的问题相当简单;如何设置鼠标的位置 您需要使用 此类用于生成本机系统输入事件,用于测试自动化、自运行演示以及其他需要控制鼠标和键盘的应用程序。Robot的主要目的是促进Java平台实现的自动化测试 使用类生成输入事件不同于将事件发布到AWT事件队列或AWT组件,因为事件是在平台的本机输入队列中生成的。例如,Robot.mouseMove将实际移动鼠标光标,而不仅仅是生成鼠标移动事件 查看课程。正如其他人所说,这可以通过以下方法实现。但是,当在

我正在用Java做一些Swing GUI工作,我认为我的问题相当简单;如何设置鼠标的位置

您需要使用

此类用于生成本机系统输入事件,用于测试自动化、自运行演示以及其他需要控制鼠标和键盘的应用程序。Robot的主要目的是促进Java平台实现的自动化测试

使用类生成输入事件不同于将事件发布到AWT事件队列或AWT组件,因为事件是在平台的本机输入队列中生成的。例如,
Robot.mouseMove
将实际移动鼠标光标,而不仅仅是生成鼠标移动事件


查看课程。

正如其他人所说,这可以通过以下方法实现。但是,当在多监视器情况下工作时,此解决方案有一个缺点,因为机器人使用主屏幕的坐标系工作,除非您另有指定

以下是一个允许您传递任何基于点的全局屏幕坐标的解决方案:

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

代码本身如下所示:

char escCode = 0x1B;
System.out.print(String.format("%c[%d;%df",escCode,row,column));
这段代码本身是不完整的,所以我建议将它放在一个方法中,并调用类似“positionCursor(int行,int列)”的名称

以下是完整的代码(方法和代码):

@丹尼尔——你已经好几年没有回复了,但今天我找到了它,它解决了我几个月来一直存在的一个问题,就是不经意的鼠标点击重新定位文本光标。在我读到你的评论之前,我一直想用Robot.mouseMove。奇怪的是,我刚刚开始使用多显示器设置!因为您使用了我不熟悉的类,所以我感到震惊的是,我所要做的就是复制您的代码,进行一些导入,然后调用它。干得好谢谢
void positionCursor(int row, int column) {
        char escCode = 0x1B;
        System.out.print(String.format("%c[%d;%df",escCode,row,column));
}