用于在双屏幕设置中将鼠标锁定到单个屏幕的Java应用程序

时间:2016-07-09 20:07:35

标签: java

我在屏幕2上运行了一个java应用程序。我想在我的应用程序中添加代码,以便将鼠标锁定到监视器1(我有2个监视器连接到我的窗口机器)。

有人能指出我能够将鼠标锁定在一个屏幕上的代码。

1 个答案:

答案 0 :(得分:1)

我想到的唯一解决方案是监控鼠标的位置并将其移回主显示器(如果它当前不在该显示器上)。以下是一些可以帮助您入门的代码:

import java.awt.AWTException;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.MouseInfo;
import java.awt.PointerInfo;
import java.awt.Robot;

public class Main {

    public static void main(String[] args) throws AWTException, InterruptedException {
        //Get the primary monitor from the environment
        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        //Create and start the thread that monitors the position of the mouse
        Thread observerThread = new Thread(new Observer(gd));
        observerThread.start();

    }

    private static class Observer implements Runnable{
        private GraphicsDevice mainMonitor;
        private Robot robot;
        int width, height;

        public Observer(GraphicsDevice gd){
            mainMonitor = gd;
            width = mainMonitor.getDisplayMode().getWidth();
            height = mainMonitor.getDisplayMode().getHeight();
            try {
                robot = new Robot();
            } catch (AWTException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        @Override
        public void run() {
            while(true){
                //Check the monitor on which the mouse is currently displayed
                PointerInfo pointerInfo = MouseInfo.getPointerInfo();
                GraphicsDevice device = pointerInfo.getDevice();
                if(!mainMonitor.equals(device)){
                    //If the mouse is not on the primary monitor move it to the center of the primary monitor.
                    robot.mouseMove(width/2, height/2);
                }
                //Wait a while before checking the position of the mouse again.
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

这种方法需要考虑的一些事项:

  1. 如果各种显示器的分辨率不同,该怎么办?这就是为什么当我从主显示器偏离鼠标时,我选择将鼠标移动到主显示器的中心。如果您想尝试为用户创建更接近将鼠标锁定到主屏幕的体验,则必须确定将鼠标移动到分辨率大于或小于主屏幕的屏幕时要执行的操作。

  2. 如果您有超过2台显示器怎么办?如果您想尝试为用户创建更接近将鼠标锁定到主屏幕的体验,那么您需要一种方法来确定监视器的相对位置。例如。监视器2位于监视器1的左侧,监视器3位于监视器1的右侧,这样您就可以将鼠标移回适当侧的监视器1的边缘 - 向右或向左,具体取决于鼠标所在的屏幕。

  3. 希望这有助于您入门!