我是靠谱客的博主 勤劳鸵鸟,最近开发中收集的这篇文章主要介绍java中调用鼠标键盘的函数_Java控制鼠标和键盘的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java SDK 1.3以后实现了Robot类。此类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件。Robot 的主要目的是便于 Java 平台实现自动测试。

使用该类生成输入事件与将事件发送到 AWT 事件队列或 AWT 组件的区别在于:事件是在平台的本机输入队列中生成的。例如,Robot.mouseMove 将实际移动鼠标光标,而不是只生成鼠标移动事件。

Robot中主要的鼠标和键盘控制方法有:

void keyPress(int keycode) 按下给定的键。

void keyRelease(int keycode) 释放给定的键。

void mouseMove(int x, int y) 将鼠标指针移动到给定屏幕坐标。

void mousePress(int buttons) 按下一个或多个鼠标按钮。

void mouseRelease(int buttons) 释放一个或多个鼠标按钮。

void mouseWheel(int wheelAmt) 在配有滚轮的鼠标上旋转滚轮。

下面就让我们来实战鼠标控制,实现一个简单的鼠标控制程序MouseController。程序功能很简单:随机移动鼠标并点击左键。

代码如下:

import java.awt.AWTException;

import java.awt.Dimension;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.event.InputEvent;

import java.util.Random;

/**

*

*/

/**

* @author sxc 石新春

* @Create date 2007-11-6

*/

public class MouseController implements Runnable {

private Dimension dim;

private Random rand;

private Robot robot;

private volatile boolean stop = false;

public MouseController() {

dim = Toolkit.getDefaultToolkit().getScreenSize();

rand = new Random();

try {

robot = new Robot();

} catch (AWTException ex) {

ex.printStackTrace();

}

}

public void run() {

while(!stop) {

int x = rand.nextInt(dim.width);

int y = rand.nextInt(dim.height);

robot.mouseMove(x, y);

robot.mousePress(InputEvent.BUTTON1_MASK);

try {

Thread.sleep(2000);

} catch (InterruptedException ex) {

ex.printStackTrace();

}

}

}

public synchronized void stop() {

stop = true;

}

public static void main(String[] args) {

MouseController mc = new MouseController();

Thread mcThread = new Thread(mc);

System.out.println("Mouse Controller start");

mcThread.start();

try {

Thread.sleep(60000);

} catch (InterruptedException ex) {

ex.printStackTrace();

}

mc.stop();

System.out.println("Mouse Controller stoped");

}

}

当然键盘映射也类似,无非是使用void keyPress(int keycode)。

现在实现了控制鼠标和键盘,接下了我们要获取操作后的效果(屏幕截图)。好在Robot类也提供了一个方法:BufferedImage createScreenCapture(Rectangle screenRect);可以直接将全屏幕或某个屏幕区域的像素拷贝到一个BufferedImage对象中。

好,下面实战使用robot截屏,实现Capture程序,每隔5秒截屏一次。

代码如下:

import java.awt.AWTException;

import java.awt.Canvas;

import java.awt.Dimension;

import java.awt.EventQueue;

import java.awt.Graphics;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.image.BufferedImage;

import javax.swing.GroupLayout;

import javax.swing.JFrame;

import javax.swing.WindowConstants;

import javax.swing.GroupLayout.Alignment;

/**

*

*/

/**

* @author sxc 石新春

*@Create date 2007-11-6

*/

public class Capture extends JFrame implements Runnable {

private Canvas screenCanvas;

private volatile boolean stop;

private Robot robot;

private Dimension dim;

public Capture() {

initComponents();

try {

robot = new Robot();

} catch (AWTException ex) {

ex.printStackTrace();

}

dim = Toolkit.getDefaultToolkit().getScreenSize();

}

private void initComponents() {

screenCanvas = new java.awt.Canvas();

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

stop = true;

setResizable(false);

GroupLayout layout = new GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(Alignment.LEADING).addComponent(screenCanvas,GroupLayout.PREFERRED_SIZE, 519,GroupLayout.PREFERRED_SIZE) );

layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEADING).addComponent(screenCanvas,GroupLayout.PREFERRED_SIZE, 434,GroupLayout.PREFERRED_SIZE)

);

pack();

}

public static void main(String args[]) {

final Capture capture = new Capture();

EventQueue.invokeLater(new Runnable() {

public void run() {

capture.setVisible(true);

}

});

Thread cutThread = new Thread(capture);

cutThread.start();

}

public void run() {

stop = false;

while(!stop) {

BufferedImage bImage = robot.createScreenCapture(new Rectangle(dim.width, dim.height));

Graphics g = this.screenCanvas.getGraphics();

g.drawImage(bImage, 0, 0, this);

try {

Thread.sleep(5000);

} catch (InterruptedException ex) {

ex.printStackTrace();

}

}

}

private synchronized void stop() {

stop = true;

}

}

例子二:

import java.awt.AWTException;import java.awt.Robot;import java.awt.event.KeyEvent;import java.io.IOException; public class RobotExp {  public static void main(String[] args) {   try {    try {     Runtime.getRuntime().exec("notepad");//打开notepad    } catch (IOException e) {     // TODO 自动生成 catch 块     e.printStackTrace();    }    Robot robot = new Robot();    //定义3秒的延迟开始写    robot.delay(3000);    robot.keyPress(KeyEvent.VK_H);    robot.keyPress(KeyEvent.VK_I);    robot.keyPress(KeyEvent.VK_SPACE);    robot.keyPress(KeyEvent.VK_S);    robot.keyPress(KeyEvent.VK_X);    robot.keyPress(KeyEvent.VK_C);   } catch (AWTException e) {    e.printStackTrace();    }   }  }

最后

以上就是勤劳鸵鸟为你收集整理的java中调用鼠标键盘的函数_Java控制鼠标和键盘的方法的全部内容,希望文章能够帮你解决java中调用鼠标键盘的函数_Java控制鼠标和键盘的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部