`
lysvanilla
  • 浏览: 80841 次
  • 性别: 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的实例源码-编写的显示器显示模式检测程序.zip

    这个程序是软件开发的一个实例,展示了如何利用Java技术来获取并解析有关计算机显示器的配置信息。以下是对这个程序及其相关知识点的详细说明: 1. **Java编程语言**:Java是一种跨平台的、面向对象的编程语言,...

    Java截图小工具-附源码.rar

    在这个截图小工具中,我们可能会使用`java.awt.Robot`类来捕获屏幕图像,`java.awt.Toolkit`用于获取屏幕的分辨率,以及`javax.swing.JFrame`创建主窗口。 2. **Robot类**:`java.awt.Robot`类允许程序模拟用户的...

    基于Java的QQ屏幕截图工具的设计与实现.zip

    Java作为一种广泛应用的编程语言,其强大的跨平台能力和丰富的库资源使其成为开发屏幕截图工具的理想选择。本项目"基于Java的QQ屏幕截图工具"正是这样一款软件,它旨在为用户提供便捷、高效的屏幕捕捉功能,并且与QQ...

    一个简单的用JAVA实现的屏幕抓图(源代码)

    根据给定的文件信息,我们可以总结出以下关于使用Java...通过掌握这些基本原理,开发者可以轻松地在Java应用程序中集成屏幕抓图功能,无论是为了开发测试工具、图像处理软件还是任何其他需要屏幕捕获功能的应用程序。

    java屏幕录像工具

    Java屏幕录像工具是一种基于Java编程语言开发的应用程序,它能够捕获用户在计算机屏幕上的一系列操作,并将其记录为视频文件。这种工具对于教学、演示、软件测试和远程协作等场景非常有用。源码的提供意味着我们可以...

    JAVA截图小工具

    JAVA截图小工具是一款基于Java编程语言开发的实用应用程序,它为用户提供了方便快捷的屏幕截图功能。通过这款工具,用户能够轻松捕获屏幕上的任何区域,并将其保存到本地,同时自动复制到剪贴板,方便进行后续的粘贴...

    java聊天程序源码-可以发送图片,文件,设置字体,截屏

    截屏功能可能通过Java的`java.awt.Robot`类实现,该类允许程序模拟用户的键盘和鼠标操作,包括捕获屏幕快照。截取的屏幕图像也需要通过网络发送到聊天伙伴。 7. **用户界面(UI)设计** 使用Eclipse IDE进行开发...

    java桌面抓取程序

    程序利用了Java AWT(Abstract Window Toolkit)和Swing库中的类来实现屏幕捕获功能。此外,还涉及到了文件操作、事件监听等相关技术。 #### 二、关键类和技术点 ##### 1. `ScreenCapture` 类 - **定义**:该类是...

    基于NetBeans开发的java应用程序集锦1

    屏幕捕获工具通常利用java.awt.Robot类来捕获屏幕上的图像,并可能通过java.io.File和java.io.FileOutputStream进行保存。 2. **文本阅读器**:Java提供了java.io和java.nio包,用于读取和处理文本文件。文本阅读器...

    java基础视频-试看.rar

    类(class)是Java的核心,对象是类的实例。控制结构包括if-else、switch、for、while等。 5. **类与对象**:在Java中,一切皆为对象。类定义了对象的属性(fields)和行为(methods)。`public`、`private`、`...

    安卓开发--简单的计算器.rar

    安卓应用主要使用Java或Kotlin编程语言编写,借助Android Studio集成开发环境(IDE)进行开发。这个项目中的计算器应用很可能就是通过这两种语言之一实现的。Android Studio提供了丰富的工具和库,可以帮助开发者...

    新版Android开发教程.rar

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

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

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

    hua_caven9a_java_安卓屏幕画笔_屏幕画笔_android_

    总之,“hua_caven9a_java_安卓屏幕画笔_屏幕画笔_android_”项目展示了Android平台上Java编程和相关技术的应用,包括Canvas绘图、SurfaceView实时渲染、MotionEvent事件处理、文件操作以及屏幕捕获。通过深入理解...

    Java屏幕截图的源码

    Java作为一门广泛使用的编程语言,提供了丰富的库和API来支持图形处理和屏幕捕获。本文将通过分析一个具体的Java屏幕截图程序源码,深入探讨其工作原理和技术细节。 #### 核心概念解析 - **`ScreenCapture`**:这...

    java开发文档以及录制动态图的软件.zip

    Java开发文档是编程者在进行Java开发...综上,这个压缩包为Java开发者提供了一套完整的工具集,既有详细的Java开发文档以供查阅学习,又有实用的动态图录制工具辅助展示和沟通,是开发者提升技能和解决问题的好帮手。

    安卓开发实例计算器+arity2.1.2.rar

    《安卓开发实例:深入解析计算器应用与arity-2.1.2.jar库的集成》 在安卓应用开发中,实践是提升技能的关键。本实例聚焦于一个基础且实用的安卓应用——计算器,它能帮助开发者熟悉UI设计、事件处理、运算逻辑等...

    Python项目-实例-13 截图工具.zip

    这个项目可能是为了教学目的或者是个人或团队开发的一个实用工具,它允许用户通过简单的命令或者界面来捕获屏幕上的图像。 在描述中只提到了"python",这表明项目的核心是Python编程。Python是一种高级、解释型、...

Global site tag (gtag.js) - Google Analytics