该功能实现后就像电脑的抓屏功能一样,只是多了个保存功能
package com.lkt.image;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;
/**
* 捕获屏幕
* @author Administrator
*
*/
public class ScreenCaptureFrame extends JFrame implements ActionListener {
private ScreenCaptureUtil scrCaptureUtil=null;
private PaintCanvas canvas=null;
private JFileChooser filechooser=null;
public ScreenCaptureFrame() {
super("抓屏");
init();
}
//初始化
private void init(){
scrCaptureUtil=new ScreenCaptureUtil();
canvas=new PaintCanvas(scrCaptureUtil);
Container c=this.getContentPane();
c.setLayout(new BorderLayout());
c.add(canvas,BorderLayout.CENTER);
JPanel jp=new JPanel();
jp.setLayout(new FlowLayout());
JButton capButton=new JButton("抓屏");
capButton.setName("zp");
jp.add(capButton);
JButton saveButton=new JButton("保存");
saveButton.setName("save");
jp.add(saveButton);
c.add(jp,BorderLayout.SOUTH);
capButton.addActionListener(this);
saveButton.addActionListener(this);
//初始化保存选择框
filechooser=new JFileChooser();
filechooser.setFileFilter(new FileFilter() {
@Override
public String getDescription() {
return "图片(*.jpg)";
}
//jpg限制
@Override
public boolean accept(File f) {
if(f.getName().endsWith(".jpg")||f.isDirectory()){
return true;
}
return false;
}
});
this.setSize(400,400);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//点击事件
@Override
public void actionPerformed(ActionEvent ae) {
JButton btn= (JButton)ae.getSource();
if("zp".equals(btn.getName())){
//系统发出“铛铛”声
Toolkit.getDefaultToolkit().beep();
canvas.drawScreen();
}else if("save".equals(btn.getName())){
BufferedImage bimg=canvas.scrImg;
String filePath="";
filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int returnVal=filechooser.showOpenDialog(filechooser);
if(returnVal==JFileChooser.APPROVE_OPTION){
filePath=filechooser.getSelectedFile().getAbsolutePath();
if(!filePath.endsWith(".jpg")){
filePath=filePath+".jpg";
}
File file=new File(filePath);
try {
if(!file.exists()){
file.createNewFile();
}
//将图片保存到本地
ImageIO.write(bimg, "jpg", file);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
new ScreenCaptureFrame();
}
}
/**
* 抓图工具类
* @author Administrator
*
*/
class ScreenCaptureUtil{
//该类可以模拟按键
private Robot robot=null;//抓屏的主要工具类
//指定坐标空间的一个区域
private Rectangle scrRect=null;//屏幕的矩形图像
public ScreenCaptureUtil() {
try {
robot=new Robot();
} catch (Exception e) {
System.out.println(e.toString());
}
//抓取屏幕的矩形图像
Dimension scrSize=Toolkit.getDefaultToolkit().getScreenSize();
//指定整个屏幕
scrRect=new Rectangle(0,0,scrSize.width,scrSize.height);
}
public BufferedImage captureScreen(){
BufferedImage scrImg=null;
try {
//创建 包含从屏幕中读取的像素的图像
scrImg=robot.createScreenCapture(scrRect);
} catch (Exception e) {
System.out.println(e.toString());
}
return scrImg;
}
}
/**
* 该类自定义一个面板,用于显示截取的图片
* @author Administrator
*
*/
class PaintCanvas extends JPanel{
private ScreenCaptureUtil scrCaptureUtil=null; //抓屏工具
public BufferedImage scrImg=null; //待画的图像
public PaintCanvas(ScreenCaptureUtil screenUtil) {
this.scrCaptureUtil=screenUtil;
}
//重载JPanel的paintComponent,用于画背景
protected void paintComponent(Graphics g){
if(scrImg!=null){
int iWidth=this.getWidth();
int iHeight=this.getHeight();
g.drawImage(scrImg, 0, 0, iWidth, iHeight, 0,0,scrImg.getWidth(), scrImg.getHeight(),null);
}
}
//抓屏并将其重绘到面板上
public void drawScreen(){
Graphics g=this.getGraphics();
scrImg=scrCaptureUtil.captureScreen();
if(scrImg!=null){
this.paintComponent(g);
}
//释放资源
g.dispose();
}
}
该功能大部分代码来自《JDK实例宝典》