Java实现一个截图机器人程序

本文介绍了一个用JavaSwing编写的简单截图机器人程序,通过Robot类实现在屏幕范围内抓取并保存截图。程序包括一个按钮,点击后会最小化窗口进行截图并显示结果。
摘要由CSDN通过智能技术生成
 现在智能机器人是一个热门话题,我们来写一个截图机器人程序。
 在软件测试中常用到要把测试结果截图保存,我们这个程序只是一个简单的演示程序,目的是抛砖引玉。
 程序源码如下:
     package swing;
/***
 * @author QiuGen
 * @description 例程ScreenCapture实现功能:
 * 截图机器人程序。
 * @date 2024/04/02
 * ***/
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.ImageProducer;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.*;
public class ScreenCapture extends JFrame {
	private JButton button = null;
	private MyLabel imageLabel = null;
	
	public ScreenCapture() {
		try { //设置显示外观为本地系统外观。注意此句需放在初始化所有控件之前
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		setTitle("截图程序");
		setBounds(100, 100, 800, 500);
		imageLabel =  new MyLabel("", SwingConstants.CENTER);
		imageLabel.setPreferredSize(new Dimension(600, 400));
		add(imageLabel, BorderLayout.NORTH);
		button = new JButton("开始截图");
		add(button, BorderLayout.SOUTH);
		button.addActionListener((event)->{
			try {
				setExtendedState(JFrame.ICONIFIED);  //设置程序窗口最小化,避免把自己截到图中
				Robot robot = new Robot();    //创建Robot对象
				Toolkit toolkit = Toolkit.getDefaultToolkit();  //获取Toolkit对象
				Rectangle area = new Rectangle(toolkit.getScreenSize());   //设置截取区域为全屏
				//将BufferedImage转换成Image
				BufferedImage bufImage = robot.createScreenCapture(area);
				ImageIO.write(bufImage, "jpg", new File(".\\image\\screencap01.jpg")); //保存图像到图片
				ImageProducer producer = bufImage.getSource();
				Image image = toolkit.createImage(producer);
				
				setExtendedState(NORMAL);  //截图完成后,恢复窗口。
				
				imageLabel.setIcon(new ImageIcon(image));  //显示图片
			} catch (Exception e) {
				e.printStackTrace();
			}
		});
		pack();
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}	

	public static void main(String[] args) {
		new ScreenCapture();
	}
}

/***图像自适应组件大小的自定义标签MyLabel***/
class MyLabel extends JLabel {
	public MyLabel(String text, int horizontalAlignment) {
		super(text, horizontalAlignment);
	}

	//自定义重载方法setIcon(ImageIcon icon)
	public void setIcon(ImageIcon icon) {
		int w = getWidth(); //标签组件的宽
		int h = getHeight(); //标签组件的高
		Image img = icon.getImage().getScaledInstance(w, h, Image.SCALE_DEFAULT);
		ImageIcon icon2=new ImageIcon(img);
		super.setIcon(icon2);
	}
}	//自定义标签MyLabel源码结束。

测试效果图:
在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值