java robot机器人控制电脑画图软件实现画个圆圈demo

前期准备

上一篇文章《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的主要概念:

  1. Robot类:Robot类是java.awt包中的一个核心类,它提供了一组方法来模拟鼠标和键盘事件。通过创建Robot对象,可以控制和模拟用户的输入操作。
  2. 图形界面组件:Robot类可以与其他AWT或Swing组件进行交互。它可以定位和操作图形界面上的按钮、文本框、滚动条等组件。

java.awt.Robot的主要用途:

  1. 自动化测试:Robot类可以用于编写自动化测试脚本,对图形界面应用程序进行自动化测试。通过模拟用户的操作,可以检查应用程序是否按预期运行,并捕获测量到的结果。
  2. UI脚本录制和回放:通过使用Robot类记录用户在图形界面上的交互操作,可以生成UI脚本。这些脚本可以重放,以便再次执行相同的操作,从而简化重复的任务。
  3. 辅助工具和自动化任务: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类的其他方法和功能,以适应更复杂的需求和场景。

 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泰山AI

原创不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值