现在智能机器人是一个热门话题,我们来写一个截图机器人程序。
在软件测试中常用到要把测试结果截图保存,我们这个程序只是一个简单的演示程序,目的是抛砖引玉。
程序源码如下:
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源码结束。
测试效果图: