
import java.awt.BorderLayout; |
import java.awt.Container; |
import java.awt.Dimension; |
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 javax.swing.JButton; |
import javax.swing.JFrame; |
import javax.swing.JPanel; |
import javax.swing.WindowConstants; |
/** |
* 捕获屏幕,屏幕截图工具 |
*/ |
public class ScreenCaptureFrame extends JFrame implements ActionListener { |
private ScreenCaptureUtil scrCaptureUtil = null;// 捕获屏幕的工具类 |
private PaintCanvas canvas = null;// 画布,用于画捕获到的屏幕图像 |
public ScreenCaptureFrame() { |
super("Screen Capture"); |
init(); |
} |
/** |
* 初始化 |
*/ |
private void init() { |
scrCaptureUtil = new ScreenCaptureUtil();// 创建抓屏工具 |
canvas = new PaintCanvas(scrCaptureUtil);// 创建画布 |
Container c = this.getContentPane(); |
c.setLayout(new BorderLayout()); |
c.add(canvas, BorderLayout.CENTER); |
JButton capButton = new JButton("抓 屏"); |
c.add(capButton, BorderLayout.SOUTH); |
capButton.addActionListener(this); |
this.setSize(400, 400); |
this.setVisible(true); |
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); |
} |
public void actionPerformed(ActionEvent e) {// 点击“抓屏”按钮时,在画布上画屏幕图像 |
canvas.drawScreen(); |
} |
public static void main(String[] args) { |
new ScreenCaptureFrame(); |
} |
} |
/** |
* 抓屏工具类 |
*/ |
class ScreenCaptureUtil { |
private Robot robot = null;// 抓屏的主要工具类 |
private Rectangle scrRect = null;// 屏幕的矩形图像 |
public ScreenCaptureUtil() { |
try { |
robot = new Robot();// 创建一个抓屏工具 |
} catch (Exception ex) { |
System.out.println(ex.toString()); |
} |
// 获取屏幕的矩形图像 |
Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize(); |
scrRect = new Rectangle(0, 0, scrSize.width, scrSize.height); |
} |
/** |
* 抓屏方法 |
* |
* @return 返回一个图像 |
*/ |
public BufferedImage captureScreen() { |
BufferedImage scrImg = null; |
try { |
scrImg = robot.createScreenCapture(scrRect);// 抓的是全屏图 |
} catch (Exception e) { |
System.out.println(e.toString()); |
} |
return scrImg; |
} |
} |
/** |
* 画布类,用于显示抓屏得到的图像 |
*/ |
class PaintCanvas extends JPanel { |
private ScreenCaptureUtil scrCaptureUtil = null;// 抓屏工具 |
private 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();// 释放资源 |
} |
} |




中级程序员
by: 大神的晚餐 发表于:2017-03-04 23:15:32 顶(1) | 踩(0) 回复
洋气呀
回复评论