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

2024-06-07 00:48

本文主要是介绍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

http://www.cnblogs.com/yinger/archive/2011/09/03/2165883.html

这篇关于Java实例开发01-01 屏幕捕获工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037711

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory