读书人

Java范例开发01-01 屏幕捕获工具

发布时间: 2012-10-11 10:16:10 作者: rapoo

Java实例开发01-01 屏幕捕获工具

知识点:

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);    }}

?

显示效果:

Java范例开发01-01 屏幕捕获工具

?

截出来的图片:当时的整个屏幕的图片

Java范例开发01-01 屏幕捕获工具

<script type="text/javascript"></script>

读书人网 >编程

热点推荐