知识点:
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); } }
显示效果:
截出来的图片:当时的整个屏幕的图片