最近在项目中,有需要调用第三方控件,找了找资源,需要用到Robot类,在这里贴一个简单的demo,记录下。如果在开发过程中需要用到其他的东西,建议看下上面的api,毕竟,官方的最全。下面上代码:
import java.awt.*;
import java.awt.event.KeyEvent;
public class TestController {
private static Robot robot;
public static void main(String[] args) {
try{
robot = new Robot();
}catch (Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
// 是否执行完一个后,再执行下一个
// 设置为 true, 表示按添加事件的顺序执行(执行完一个再执行下一个)
// robot.setAutoWaitForIdle(Boolean.TRUE);
// 移动鼠标到屏幕中央
// 睡眠指定的时间, 相当于 Thread.sleep(long ms) ,此处传的是int
robot.delay(5000);
//移动到屏幕左上角
robot.mouseMove(-1,-1);
robot.delay(5000);
// 在生成一个事件后,自动睡眠5000毫秒
// robot.setAutoDelay(5000);
// 获取当前屏幕大小
Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();
int width=screen.width; //屏幕宽度,以像素为单位
int height=screen.height; //屏幕高度
System.out.println(width);// 运行结果 1280
System.out.println(height);// 运行结果 720
// 根据获取到的高度和宽度移动鼠标的位置 :下面的0.43和0.375是根据 控件位置/上面的高宽获得的
robot.mouseMove(new Double(Math.ceil(width*0.43)).intValue(),new Double(Math.ceil(height*0.375)).intValue());
robot.delay(5000);
// 按下鼠标左键
robot.mousePress(KeyEvent.BUTTON1_DOWN_MASK);
// 释放鼠标左键(按下后必须要释放, 一次点击操作包含了按下和释放)
robot.mouseRelease(KeyEvent.BUTTON1_DOWN_MASK);
robot.delay(5000);
// 按下键盘的r键
robot.keyPress(KeyEvent.VK_R);
System.out.println(KeyEvent.VK_R);// 运行值 82,如果不想用robot提供的,也可以直接输入对应的ASCII码
robot.keyRelease(KeyEvent.VK_R);
robot.delay(5000);
Point location = MouseInfo.getPointerInfo().getLocation();
System.out.println(location);//运行结果 java.awt.Point[x=550,y=270]
System.out.println(location.getX());// 运行结果 550
System.out.println(location.getY());// 运行结果 270
}
}
从上面的demo可以看出,使用robot可以分为三部分:操作鼠标,操作键盘,控制robot类;
1.操作鼠标:
void mouseMove(int x, int y) // 移动鼠标
void mousePress(int buttons) // 按下鼠标
void mouseRelease(int buttons) // 释放鼠标
void mouseWheel(int wheelAmt) // 滚动鼠标滚轮,在demo未使用,因为项目没有用到,有兴趣的猿友可以自己试试
2.操作键盘:
void keyPress(int keycode) // 按下键盘
void keyRelease(int keycode) // 释放键盘
3.控制robot类:
void delay(int ms) // 睡眠毫秒数
void setAutoWaitForIdle(boolean isOn) // 设置是否在生成事件后自动调用下一个事件
void setAutoDelay(int ms) // 设置在生成事件后自动睡眠的毫秒数
除了robot自己的方法以外,还需要一些辅助的操作,才能帮助我们更好的实现我们想要达到的效果,比如:我demo中使用的
Dimension screen=Toolkit.getDefaultToolkit().getScreenSize(); // 获取屏幕大小
Point location = MouseInfo.getPointerInfo().getLocation(); // 获取鼠标当前位置
当然还有其他的,就不一一说明了。
以上是个人使用robot的相关总结, 希望能和猿友们多多交流,共同进步