`
lysvanilla
  • 浏览: 78726 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

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

}

 

显示效果:

6

 

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

test

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

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

     《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--异常之UncaughtExceptionHandler全局捕获处理 |--异步任务AsyncTask的用法 |--异步任务的自定义 |--快捷方式增删查 |--手势识别器GestureDetector的用法 |--拍照之调用系统相机并显示及保存 |--拨打电话 |--按健...

    Android开发资料合集-World版!

    9.24、运用JAVA MAIL包实现发GMAIL邮件 230 9.26、ANDROID键盘响应 236 9.27、后台监听某个按键 238 9.28、VECTOR用法 239 9.29、CURSOR 242 9.30、把一个字符串写进文件 244 9.31、把文件内容读出到一个字符串 245 ...

    javaSE代码实例

    1.2 安装开发工具包 5 1.2.1 下载JDK 5 1.2.2 安装JDK 6 1.2.3 安装后Java目录的解读 7 1.3 学会使用API 7 1.4 第一个Java程序 8 1.4.1 开发源代码 8 1.4.2 编译运行 9 1.5 小结 11 第2章 基本...

    JavaScript笔记

    | 解决:控制台--(工具--&gt;JavaScript控制台或F12) | 包含错误信息;指向错误位置的超链接 |--③.打桩:在指定变量位置输出变量或对象的内容 console.log(内容);--&gt;出现在控制台--&gt;日志 4.变量:js中...

    Android学习系列教程实例.pdf

    2.3. 旋转屏幕重新加载 Acitivity .......... 33 第 3 章 第三章 ................... 40 3.1. 缓冲界面 ......................................... 40 3.1.1. Demo1 .................................... 40 ...

    c#学习笔记.txt

    另外我发现论坛上学习Java的人都非常的有个性,当有人问起学习哪种语言更好时,他会打出几百个“JAVA”来,填满整个屏幕,也不说是为了什么。我觉得这样做未免有些太霸道了,如果你说这叫偏执狂我也不反对,虽然我...

    Android 开发技巧

    9.24、运用JAVA MAIL包实现发GMAIL邮件 230 9.26、ANDROID键盘响应 236 9.27、后台监听某个按键 238 9.28、VECTOR用法 239 9.29、CURSOR 242 9.30、把一个字符串写进文件 244 9.31、把文件内容读出到一个字符串 245 ...

    精通qt4编程(源代码)

    \17.3.4 QtDBus应用实例 432 \17.4 小结 441 \第18章 Qt插件 442 \18.1 Qt插件开发基础 442 \18.2 Qt设计器插件 443 \18.2.1 使用Scratchpad 443 \18.2.2 提升自定义窗口部件 444 \18.2.3 Qt设计器插件开发 444 \...

    精通Qt4编程(第二版)源代码

    \17.3.4 QtDBus应用实例 432 \17.4 小结 441 \第18章 Qt插件 442 \18.1 Qt插件开发基础 442 \18.2 Qt设计器插件 443 \18.2.1 使用Scratchpad 443 \18.2.2 提升自定义窗口部件 444 \18.2.3 Qt设计器插件开发 ...

Global site tag (gtag.js) - Google Analytics