知识点:
1.Swing (使用eclipse插件Jigloo开发)
2.JPEG编码器
源码:
package chapter01.sample01;
import java.awt.Dimension;
import java.awt.Image;
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.File;
import java.io.FileOutputStream;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
@SuppressWarnings("restriction")
public class CaptureScreen extends javax.swing.JFrame {
private static final long serialVersionUID = -2726631763599696338L;
private JMenuBar jMenuBar1;
private JMenuItem jMenuItemClear;
private JScrollPane jScrollPaneGloba;
private JLabel jLabelShow;
private JMenuItem jMenuItemExit;
private JMenuItem jMenuItemSaveAs;
private JMenuItem jMenuItemCapture;
private JMenu jMenu1;
private JFileChooser fileChooser = new JFileChooser();// 文件选择器
private JPEGImageEncoder encoder = null;// JPEG编码器
private Image tempImage = null;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
CaptureScreen inst = new CaptureScreen();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public CaptureScreen() {
super();
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.setTitle("CaptrueScreenTool");
getContentPane().setLayout(null);
{
jScrollPaneGloba = new JScrollPane();
getContentPane().add(jScrollPaneGloba);
// jScrollPaneGloba.setBounds(0, 0, 384, 234);//不能这样子,否则还是窗体扩大了就会显示不全
jScrollPaneGloba.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
{
jLabelShow = new JLabel();
jScrollPaneGloba.setViewportView(jLabelShow);// 面板的Viewport属性
}
}
{
jMenuBar1 = new JMenuBar();
setJMenuBar(jMenuBar1);
jMenuBar1.setSize(384, 30);
jMenuBar1.setPreferredSize(new java.awt.Dimension(384, 30));
{
jMenu1 = new JMenu();
jMenuBar1.add(jMenu1);
jMenu1.setText("\u64cd\u4f5c");
{
jMenuItemCapture = new JMenuItem();
jMenu1.add(jMenuItemCapture);
jMenuItemCapture.setText("\u622a\u5c4f");
jMenuItemCapture.setAccelerator(KeyStroke.getKeyStroke("shift ctrl pressed P"));
jMenuItemCapture.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jMenuItemCaptureActionPerformed(evt);
}
});
}
{
jMenuItemSaveAs = new JMenuItem();
jMenu1.add(jMenuItemSaveAs);
jMenuItemSaveAs.setText("\u4fdd\u5b58");
jMenuItemSaveAs.setAccelerator(KeyStroke.getKeyStroke("shift pressed S"));
jMenuItemSaveAs.setEnabled(false);
jMenuItemSaveAs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
saveImage();
}
});
}
{
jMenuItemClear = new JMenuItem();
jMenu1.add(jMenuItemClear);
jMenuItemClear.setText("\u6e05\u7a7a");
jMenuItemClear.setAccelerator(KeyStroke.getKeyStroke("shift ctrl pressed C"));
jMenuItemClear.setEnabled(false);
jMenuItemClear.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jMenuItemClearActionPerformed(evt);
}
});
}
{
jMenuItemExit = new JMenuItem();
jMenu1.add(jMenuItemExit);
jMenuItemExit.setText("\u9000\u51fa");
jMenuItemExit.setAccelerator(KeyStroke.getKeyStroke("shift ctrl pressed X"));
jMenuItemExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jMenuItemExitActionPerformed(evt);
}
});
}
}
}
pack();
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
private void jMenuItemCaptureActionPerformed(ActionEvent evt) {
tempImage = this.createImage();
jLabelShow.setIcon(new ImageIcon(tempImage));
jMenuItemCapture.setEnabled(false);
jMenuItemSaveAs.setEnabled(true);
jMenuItemClear.setEnabled(true);
}
// 截屏 :这里是重点,保存图片
private Image createImage() {
try {
Image tempLocalImage = null;
Robot robot = new Robot();
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle scrRectangle = new Rectangle(0, 0, dimension.width, dimension.height);
tempLocalImage = robot.createScreenCapture(scrRectangle);
return tempLocalImage;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 保存 :这里是保存图片的代码
private void saveImage() {
try {
int save = fileChooser.showSaveDialog(this);// Pops up a "Save File" file chooser dialog.
if (save == JFileChooser.APPROVE_OPTION) {// 点击了OK(或者Yes)
// 获取要设置的文件名(包括路径)
File saveFileName = fileChooser.getSelectedFile();
// 获取要保存文件的名字
String fileName = new String(saveFileName.getPath() + ".jpg");// abstract pathname
// 1.首先创建一个输出流
FileOutputStream fileOutputStream = new FileOutputStream(fileName);
// 2.然后把输出流用JPEG编码器进行包裹,其实就是把输出流连接到编码器
encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);
// 把BufferedImage对象进行编码
encoder.encode((BufferedImage) tempImage);
fileOutputStream.flush();// 清空缓存
fileOutputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 清空
private void jMenuItemClearActionPerformed(ActionEvent evt) {
jLabelShow.setIcon(null);
jMenuItemCapture.setEnabled(true);
jMenuItemClear.setEnabled(false);
jMenuItemSaveAs.setEnabled(false);
}
// 退出
private void jMenuItemExitActionPerformed(ActionEvent evt) {
System.exit(0);
}
}
显示效果:
截出来的图片:当时的整个屏幕的图片
http://www.cnblogs.com/yinger/archive/2011/09/03/2165883.html