前期准备
上一篇文章《java robot机器人控制windows打开浏览器,访问指定网址》
打开电脑画图软件,以window自带的画图软件为例,打开后点击最大化。
代码
java代码示例,放在idea里运行即可
import java.awt.*;
import java.awt.event.*;
public class RobotPaint{
//中心点x坐标
static int centerPx = 360;
//中心点y坐标
static int centerPy = 540;
//起始点x坐标
static int beginPx = 360;
//起始点y坐标
static int beginPy = 340;
//圆半径
static int radio = 200;
//上半圆
static int RIGHT_LEFT_UP = 1;
//下半圆
static int LEFT_RIGHT_DOWN = -1;
//标识
static int flag = LEFT_RIGHT_DOWN;
//java robot对象
static Robot robot;
static {
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
}
public static void main(String [] args) throws AWTException{
//运行后等待3秒,切换到画图界面
robot.delay(3000);
//鼠标移动到起始点位
robot.mouseMove(beginPx, beginPy);
robot.delay(100);
//鼠标点击左键
robot.mousePress(InputEvent.BUTTON1_MASK);
//鼠标画圈
circle(robot);
//释放鼠标左键
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
//画圆圈
public static void circle(Robot robot) {
int px=beginPx;
int py=beginPy;
while (true){
if (flag == LEFT_RIGHT_DOWN) {//上半圆的运动轨迹方程
px += 1;
//y = b + (int) Math.sqrt(r^2 - (x - a)^2);
if (px <= centerPx+radio) {
py = centerPy - (int) Math.sqrt( Math.pow(radio, 2) - Math.pow( (px - centerPx),2 ) );
}else {
px = centerPx + radio;
flag = RIGHT_LEFT_UP;
}
}else if (flag == RIGHT_LEFT_UP) {//下半圆的运动轨迹方程
px -= 1;
if (px >= centerPx - radio) {
py = centerPy + (int) Math.sqrt( Math.pow(radio, 2) - Math.pow( (px - centerPx),2 ) );
}else{
px = centerPx - radio;
flag = LEFT_RIGHT_DOWN;
}
}
robot.mouseMove(px, py);
robot.delay(20);
if(px==beginPx&&py==beginPy){
break;
}
}
}
}
优化后代码,方便画多个圆
package com.tarzan.reptile.demo;
import java.awt.*;
import java.awt.event.InputEvent;
public class RobotPaint {
//上半圆
static int RIGHT_LEFT_UP = 1;
//下半圆
static int LEFT_RIGHT_DOWN = -1;
//标识
static int flag = LEFT_RIGHT_DOWN;
//java robot对象
static Robot robot;
static {
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws AWTException {
//运行后等待3秒,切换到画图界面
robot.delay(3000);
//鼠标画圈
circle(robot, 360, 540, 200);
//鼠标画圈
circle(robot, 460, 540, 200);
}
//画圆圈
public static void circle(Robot robot, int centerPx, int centerPy, int radio) {
int px = centerPx;
int py = centerPy - radio;
while (true) {
if (flag == LEFT_RIGHT_DOWN) {//上半圆的运动轨迹方程
px += 1;
//y = b + (int) Math.sqrt(r^2 - (x - a)^2);
if (px < centerPx + radio) {
py = centerPy - (int) Math.sqrt(Math.pow(radio, 2) - Math.pow((px - centerPx), 2));
} else {
px = centerPx + radio;
flag = RIGHT_LEFT_UP;
}
} else if (flag == RIGHT_LEFT_UP) {//下半圆的运动轨迹方程
px -= 1;
if (px > centerPx - radio) {
py = centerPy + (int) Math.sqrt(Math.pow(radio, 2) - Math.pow((px - centerPx), 2));
} else {
px = centerPx - radio;
flag = LEFT_RIGHT_DOWN;
}
}
robot.mouseMove(px, py);
robot.delay(20);
//鼠标点击左键
robot.mousePress(InputEvent.BUTTON1_MASK);
if (px == centerPx && py == (centerPy - radio)) {
//释放鼠标左键
robot.mouseRelease(InputEvent.BUTTON1_MASK);
break;
}
}
}
}
效果图
效果图,实际运行后,可以看到画笔画圆圈的的动态轨迹效果
优化后代码,方便画多个园
相关知识
java.awt.Robot是Java提供的一个类,用于模拟用户在图形界面上的鼠标和键盘操作。它可以自动化执行各种用户交互操作,如移动鼠标、点击按钮、输入文本等。在接下来的3000字内,我将为您详细解释java.awt.Robot技术的主要概念、用途和基本用法。
java.awt.Robot的主要概念:
- Robot类:Robot类是java.awt包中的一个核心类,它提供了一组方法来模拟鼠标和键盘事件。通过创建Robot对象,可以控制和模拟用户的输入操作。
- 图形界面组件:Robot类可以与其他AWT或Swing组件进行交互。它可以定位和操作图形界面上的按钮、文本框、滚动条等组件。
java.awt.Robot的主要用途:
- 自动化测试:Robot类可以用于编写自动化测试脚本,对图形界面应用程序进行自动化测试。通过模拟用户的操作,可以检查应用程序是否按预期运行,并捕获测量到的结果。
- UI脚本录制和回放:通过使用Robot类记录用户在图形界面上的交互操作,可以生成UI脚本。这些脚本可以重放,以便再次执行相同的操作,从而简化重复的任务。
- 辅助工具和自动化任务:Robot类可以用于创建辅助工具或执行自动化任务。例如,可以编写一个自动截图工具,让Robot类模拟用户按下截图快捷键,并将屏幕内容保存为图片。
基本使用方法:
1.创建Robot对象:首先,需要通过调用new Robot()
构造函数创建一个Robot对象。
Robot robot = new Robot();
2.模拟鼠标操作:通过Robot对象的方法,可以模拟鼠标的各种操作,如移动、点击、拖拽等。
robot.mouseMove(x, y); // 将鼠标移动到指定坐标(x, y)
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); // 按下鼠标左键
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); // 松开鼠标左键
3.模拟键盘操作:通过Robot对象的方法,可以模拟键盘的各种操作,如按键、释放、输入文本等。
robot.keyPress(KeyEvent.VK_ENTER); // 按下Enter键
robot.keyRelease(KeyEvent.VK_ENTER); // 松开Enter键
robot.keyPress(KeyEvent.VK_SHIFT); // 按下Shift键
robot.keyPress(KeyEvent.VK_A); // 按下A键
robot.keyRelease(KeyEvent.VK_A); // 松开A键
robot.keyRelease(KeyEvent.VK_SHIFT); // 松开Shift键
4.获取屏幕截图:通过Robot对象的方法,可以捕获屏幕上指定区域的截图,并将其保存为图片文件。
Rectangle screenRect = new Rectangle(0, 0, screenWidth, screenHeight);
BufferedImage screenshot = robot.createScreenCapture(screenRect);
ImageIO.write(screenshot, "png", new File("screenshot.png"));
总结: java.awt.Robot是Java提供的一个类,用于模拟用户在图形界面上的鼠标和键盘操作。它可以自动化执行各种用户交互操作,用于自动化测试、UI脚本录制回放、辅助工具等应用场景。通过创建Robot对象并调用相应的方法,可以模拟鼠标和键盘事件,实现对图形界面的控制。请注意,使用Robot类需要小心谨慎,确保不会滥用它的能力或违反安全性要求。此外,还可以进一步了解Robot类的其他方法和功能,以适应更复杂的需求和场景。