最近无聊自己写界面玩,发现robot类操作鼠标挺好用的。对robot类更加熟一点了。记一下。
获取鼠标位置
Point p = MouseInfo.getPointerInfo().getLocation();
System.out.println(p.getX() + "---" +p.getY());
鼠标移动
// 鼠标移动
public static void change(int type, int x, int y){
Point p = MouseInfo.getPointerInfo().getLocation();
int width = (int) p.getX() + x;
int heigh = (int) p.getY() + y;
if(type == 0) {
width = x;
heigh = y;
}
Robot robot;
try {
robot = new Robot();
robot.mouseMove(width,heigh);
} catch (AWTException e) {
e.printStackTrace();
}
}
这里入参type为0时,xy直接为入参本身。
模拟鼠标左右键
// 模拟鼠标左键右键
public static void onclickSB(String lr){
Robot robot = null;
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
if(lr.equals("right")) {
robot.mousePress(InputEvent.BUTTON3_MASK);
robot.mouseRelease(InputEvent.BUTTON3_MASK);
} else {
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
}
假装没看见自己的函数命名(≖ᴗ≖)✧。如果鼠标移动和鼠标点击同时配合使用,需要加进程暂停,不然,点击和移动的事件执行的顺序会紊乱。所以,需要比较受顺序影响的地方,添加暂停代码,在不影响顺序和体验的前提下,比较适中的数值200毫秒。具体因人而异。
// 进程暂停
public static void stop(int s){
try {
Thread.sleep(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
实例:
public static void clear(){
Point p = MouseInfo.getPointerInfo().getLocation();
// System.out.println(p.getX() + "---" +p.getY());
change(0,x, y);
onclickSB("left");
change(0,x-40, y-100);
onclickSB("left");
change(0,(int)p.getX(), (int)p.getY());
stop(200);
}
这是其中一段自己写的清除eclipse控制台日志中点击清理键的鼠标移动,获取鼠标当前位置,改变鼠标位置为xy,点击鼠标左键,改变鼠标位置为已经点击的左上角,点击鼠标左键,改变位置为最初位置。停顿200毫秒。后续我又其他事件,所以需要停顿。
ps:我写的是在控制台打印10行文本内容,有上下两个按钮,上是上一页,下是下一页,一个输入框,可输入页码或者,想查询的文字内容,自动跳行,点击下自动跳行。控制鼠标是为了清理上一次打印的内容,按ctrl+1选中当前鼠标位置为清理日志按钮坐标。