JAVA截屏程序(第三版)

呵呵,昨天也看到朋友的留言,又增加了一些功能,

1,增加了一个把截到的图片复制到系统的剪帖板,这样一来就可以直接粘帖到word,photoshop,画图等程序里面了

2,增加了每截一张图片都会新开一个tab来放它,并且tab里面各自有各自的操作方法.

点击下载源文件和可执行JAR文件

/*
 * CaptureScreen.java
 *
 * Created on 2007年8月30日, 下午12:46
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 
*/

package  hadeslee.swing;

/**
 *
 * 
@author  lbf
 
*/
import  java.awt. * ;
import  java.awt.datatransfer.DataFlavor;
import  java.awt.datatransfer.Transferable;
import  java.awt.datatransfer.UnsupportedFlavorException;
import  java.awt.event. * ;
import  javax.swing. * ;
import  java.io. * ;
import  javax.imageio. * ;
import  java.awt.image. * ;

public   class  CaptureScreen  extends  JFrame  implements  ActionListener{
    
private  JButton start,cancel;
    
private  JPanel c;
    
private  BufferedImage get;
    
private  JTabbedPane jtp; // 一个放置很多份图片
     private   int  index; // 一个一直会递增的索引,用于标认图片
     private  JRadioButton java,system; // JAVA界面,系统界面
     /**  Creates a new instance of CaptureScreen  */
    
public  CaptureScreen() {
        
super ( " 屏幕截取软件(第三版) " );
        
try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
catch (Exception exe){
            exe.printStackTrace();
        }
        initWindow();
        initOther();
    }
    
private   void  initOther(){
        jtp
= new  JTabbedPane(JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT);
    }
    
private   void  initWindow(){
        start
= new  JButton( " 开始截取 " );
        cancel
= new  JButton( " 退出 " );
        start.addActionListener(
this );
        cancel.addActionListener(
this );
        JPanel buttonJP
= new  JPanel();
        c
= new  JPanel( new  BorderLayout());
        JLabel jl
= new  JLabel( " 屏幕截取 " ,JLabel.CENTER);
        JLabel jl1
= new  JLabel( " 作者:千里冰封 " ,JLabel.CENTER);
        jl.setFont(
new  Font( " 黑体 " ,Font.BOLD, 40 ));
        jl1.setFont(
new  Font( " 宋体 " ,Font.BOLD, 20 ));
        jl.setForeground(Color.RED);
        jl1.setForeground(Color.BLUE);
        c.add(jl,BorderLayout.CENTER);
        c.add(jl1,BorderLayout.SOUTH);
        buttonJP.add(start);
        buttonJP.add(cancel);
        buttonJP.setBorder(BorderFactory.createTitledBorder(
" 公共操作区 " ));
        JPanel jp
= new  JPanel(); // 放两个单选按钮的面板
        jp.add(java = new  JRadioButton( " java界面 " ));
        jp.add(system
= new  JRadioButton( " 系统界面 " , true ));
        java.addActionListener(
this );
        system.addActionListener(
this );
        jp.setBorder(BorderFactory.createTitledBorder(
" 界面风格 " ));
        ButtonGroup bg
= new  ButtonGroup();
        bg.add(java);
        bg.add(system);
        JPanel all
= new  JPanel();
        all.add(jp);
        all.add(buttonJP);
        
this .getContentPane().add(c,BorderLayout.CENTER);
        
this .getContentPane().add(all,BorderLayout.SOUTH);
        
this .setSize( 500 , 400 );
        
this .setLocationRelativeTo( null );
        
this .setVisible( true );
        
this .setAlwaysOnTop( true );
        
this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
private   void  updates(){
        
this .setVisible( true );
        
if (get != null ){
            
// 如果索引是0,则表示一张图片都没有被加入过,
            
// 则要清除当前的东西,重新把tabpane放进来
             if (index == 0 ){
                c.removeAll();
                c.add(jtp,BorderLayout.CENTER);
            }
else { // 否则的话,直接对tabpane添加面板就可以了
                
// 就什么都不用做了
            }
            PicPanel pic
= new  PicPanel(get);
            jtp.addTab(
" 图片 " + ( ++ index),pic);
            jtp.setSelectedComponent(pic);
            SwingUtilities.updateComponentTreeUI(c);
        }
    }
    
private   void  doStart(){
        
try {
            
this .setVisible( false );
            Thread.sleep(
500 ); // 睡500毫秒是为了让主窗完全不见
            Robot ro = new  Robot();
            Toolkit tk
= Toolkit.getDefaultToolkit();
            Dimension di
= tk.getScreenSize();
            Rectangle rec
= new  Rectangle( 0 , 0 ,di.width,di.height);
            BufferedImage bi
= ro.createScreenCapture(rec);
            JFrame jf
= new  JFrame();
            Temp temp
= new  Temp(jf,bi,di.width,di.height);
            jf.getContentPane().add(temp,BorderLayout.CENTER);
            jf.setUndecorated(
true );
            jf.setSize(di);
            jf.setVisible(
true );
            jf.setAlwaysOnTop(
true );
        } 
catch (Exception exe){
            exe.printStackTrace();
        }
    }
    
/**
     *公用的处理保存图片的方法
     *这个方法不再私有了
     
*/
    
public    void  doSave(BufferedImage get){
        
try {
            
if (get == null ){
                JOptionPane.showMessageDialog(
this , " 图片不能为空!! " , " 错误 " ,JOptionPane.ERROR_MESSAGE);
                
return ;
            }
            JFileChooser jfc
= new  JFileChooser( " . " );
            jfc.addChoosableFileFilter(
new  GIFfilter());
            jfc.addChoosableFileFilter(
new  BMPfilter());
            jfc.addChoosableFileFilter(
new  JPGfilter());
            jfc.addChoosableFileFilter(
new  PNGfilter());
            
int  i = jfc.showSaveDialog( this );
            
if (i == JFileChooser.APPROVE_OPTION){
                File file
= jfc.getSelectedFile();
                String about
= " PNG " ;
                String ext
= file.toString().toLowerCase();
                javax.swing.filechooser.FileFilter ff
= jfc.getFileFilter();
                
if (ff  instanceof  JPGfilter){
                    
if ( ! ext.endsWith( " .jpg " )){
                        String ns
= ext + " .jpg " ;
                        file
= new  File(ns);
                        about
= " JPG " ;
                    }
                } 
else   if (ff  instanceof  PNGfilter){
                    
if ( ! ext.endsWith( " .png " )){
                        String ns
= ext + " .png " ;
                        file
= new  File(ns);
                        about
= " PNG " ;
                    }
                }
else   if (ff  instanceof  BMPfilter){
                    
if ( ! ext.endsWith( " .bmp " )){
                        String ns
= ext + " .bmp " ;
                        file
= new  File(ns);
                        about
= " BMP " ;
                    }
                }
else   if (ff  instanceof  GIFfilter){
                    
if ( ! ext.endsWith( " .gif " )){
                        String ns
= ext + " .gif " ;
                        file
= new  File(ns);
                        about
= " GIF " ;
                    }
                }
                
if (ImageIO.write(get,about,file)){
                    JOptionPane.showMessageDialog(
this , " 保存成功! " );
                } 
else
                    JOptionPane.showMessageDialog(
this , " 保存失败! " );
            }
        } 
catch (Exception exe){
            exe.printStackTrace();
        }
    }
    
/**  
     *公共的处理把当前的图片加入剪帖板的方法
     
*/
    
public   void  doCopy( final  BufferedImage image){
        
try {
            
if (get == null ){
                JOptionPane.showMessageDialog(
this , " 图片不能为空!! " , " 错误 " ,JOptionPane.ERROR_MESSAGE);
                
return ;
            }
            Transferable trans 
=   new  Transferable(){
                
public  DataFlavor[] getTransferDataFlavors() {
                    
return   new  DataFlavor[] { DataFlavor.imageFlavor };
                }
                
public   boolean  isDataFlavorSupported(DataFlavor flavor) {
                    
return  DataFlavor.imageFlavor.equals(flavor);
                }
                
public  Object getTransferData(DataFlavor flavor)  throws  UnsupportedFlavorException, IOException {
                    
if (isDataFlavorSupported(flavor))
                        
return  image;
                    
throw   new  UnsupportedFlavorException(flavor);
                }
                
            };
            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, 
null );
            JOptionPane.showMessageDialog(
this , " 已复制到系统粘帖板!! " );
        }
catch (Exception exe){
            exe.printStackTrace();
            JOptionPane.showMessageDialog(
this , " 复制到系统粘帖板出错!! " , " 错误 " ,JOptionPane.ERROR_MESSAGE);
        }
    }
    
// 处理关闭事件
     private   void  doClose(Component c){
        jtp.remove(c);
        c
= null ;
        System.gc();
    }
    
public   void  actionPerformed(ActionEvent ae){
        Object source
= ae.getSource();
        
if (source == start){
            doStart();
        } 
else   if (source == cancel){
            System.exit(
0 );
        }
else   if (source == java){
            
try {
                UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
                SwingUtilities.updateComponentTreeUI(
this );
            }
catch (Exception exe){
                exe.printStackTrace();
            }
        }
else   if (source == system){
            
try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                SwingUtilities.updateComponentTreeUI(
this );
            }
catch (Exception exe){
                exe.printStackTrace();
            }
        }
    }
    
// 一个内部类,它表示一个面板,一个可以被放进tabpane的面板
    
// 也有自己的一套处理保存和复制的方法
     private   class  PicPanel  extends  JPanel  implements  ActionListener{
        JButton save,copy,close;
// 表示保存,复制,关闭的按钮
        BufferedImage get; // 得到的图片
         public  PicPanel(BufferedImage get){
            
super ( new  BorderLayout());
            
this .get = get;
            initPanel();
        }
        
private   void  initPanel(){
            save
= new  JButton( " 保存(S) " );
            copy
= new  JButton( " 复制到剪帖板(C) " );
            close
= new  JButton( " 关闭(X) " );
            save.setMnemonic(
' S ' );
            copy.setMnemonic(
' C ' );
            close.setMnemonic(
' X ' );
            JPanel buttonPanel
= new  JPanel();
            buttonPanel.add(copy);
            buttonPanel.add(save);
            buttonPanel.add(close);
            JLabel icon
= new  JLabel( new  ImageIcon(get));
            
this .add( new  JScrollPane(icon),BorderLayout.CENTER);
            
this .add(buttonPanel,BorderLayout.SOUTH);
            save.addActionListener(
this );
            copy.addActionListener(
this );
            close.addActionListener(
this );
        }
        
public   void  actionPerformed(ActionEvent e) {
            Object source
= e.getSource();
            
if (source == save){
                doSave(get);
            }
else   if (source == copy){
                doCopy(get);
            }
else   if (source == close){
                get
= null ;
                doClose(
this );
            }
        }
    }
    
// 保存BMP格式的过滤器
     private   class  BMPfilter  extends  javax.swing.filechooser.FileFilter{
        
public  BMPfilter(){
            
        }
        
public   boolean  accept(File file){
            
if (file.toString().toLowerCase().endsWith( " .bmp " ) ||
                    file.isDirectory()){
                
return   true ;
            } 
else
                
return   false ;
        }
        
public  String getDescription(){
            
return   " *.BMP(BMP图像) " ;
        }
    }
    
// 保存JPG格式的过滤器
     private   class  JPGfilter  extends  javax.swing.filechooser.FileFilter{
        
public  JPGfilter(){
            
        }
        
public   boolean  accept(File file){
            
if (file.toString().toLowerCase().endsWith( " .jpg " ) ||
                    file.isDirectory()){
                
return   true ;
            } 
else
                
return   false ;
        }
        
public  String getDescription(){
            
return   " *.JPG(JPG图像) " ;
        }
    }
    
// 保存GIF格式的过滤器
     private   class  GIFfilter  extends  javax.swing.filechooser.FileFilter{
        
public  GIFfilter(){
            
        }
        
public   boolean  accept(File file){
            
if (file.toString().toLowerCase().endsWith( " .gif " ) ||
                    file.isDirectory()){
                
return   true ;
            } 
else
                
return   false ;
        }
        
public  String getDescription(){
            
return   " *.GIF(GIF图像) " ;
        }
    }
    
    
// 保存PNG格式的过滤器
     private   class  PNGfilter  extends  javax.swing.filechooser.FileFilter{
        
public   boolean  accept(File file){
            
if (file.toString().toLowerCase().endsWith( " .png " ) ||
                    file.isDirectory()){
                
Android App中监听系统截屏(截屏监听功能) 功能需求: App内截屏监控功能,当发现用户在我们的app内进行了截屏操作时,进行对图片的二次操作,例如添加二维码,公司logo等一系列操作。 首先来app界面图及截屏监听图添加效果图 主要是利用内容观察者(ContentObserver)监听媒体数据库的变化,当数据库有变化时,获取最后插入的一条图片数据,如果该图片符合特定的规则,则认为被截屏了,下面看看截屏管理类 ScreenShotListenManager.java package com.test.base; import andro 阅读详情

相关推荐

Java+Selenium 自动化测试-截屏

今天学到了可以通过TakesScreenshot接口来实现截屏,在做自动化测试的时候,可以直接把抛出异常或跟期望结果不匹配时把页面截屏下来,方便后面查看定位,这个方法简单又实用。 直接上代码: package JiepinTest; import java.io.File; import java.io.IOException; import java.text.SimpleDateForm...

lingjing0922的博客 1971

java实现截屏和录屏功能

截屏和录屏讲解使用java实现截屏和录屏功能一、截屏二、录屏结论 使用java实现截屏和录屏功能 在计算机编程中,截屏和录屏功能是一种非常有用的功能,它可以让我们更好地了解和控制系统的状态。在本文中,我们将介绍如何使用java实现截屏和录屏功能。 一、截屏 截屏是指从显示器上捕捉屏幕的当前内容,并将其保存为图像文件的过程。在java中,可以使用Robot类来实现截屏功能。Robot类提供了createScreenCapture()方法,可以捕获屏幕上的内容,并将其保存为BufferedImage对象。 //

m0_73589720的博客 4317

Android 截屏监听方案

截屏监听方案

广岛冰盐的博客 2820

【课程设计】java屏幕截图工具

运行程序后会弹出一个图形窗口,用户可进行选取或退出,当用户选择截取的时候会在右下角提示用户进行随意截取,当用户选取完成后,双击则完成截屏,然后把截取的图片显示在窗口中,再次选取截图会把新截取的图片放到同一个窗口中,看需要保存哪一张图片,同时底部有两个按钮供用户选择,可以选择保存和关闭,当用户点击关闭会把预览的图片一张一张清除,直到没有图片就会退出预览窗口。

m0_74901369的博客 2527

Java实现屏幕截图

请注意,由于屏幕截图涉及到对屏幕的操作,因此需要在安全策略允许的情况下执行。屏幕截图是在许多应用程序中常见的功能,它允许用户捕捉屏幕上的内容并保存为图像文件。在Java中,我们可以使用。类,我们可以轻松地捕捉屏幕上的内容并保存为图像文件,为我们的应用程序添加了实用的功能。本文将介绍如何使用Java代码来实现屏幕截图的功能。方法来捕捉整个屏幕的图像,并将其保存为PNG格式的文件。类获取屏幕的尺寸,并创建一个与屏幕尺寸相同的。的静态方法,该方法将用于执行屏幕截图操作。包,这些包提供了我们所需的类和方法。

HackLogic的博客 879

javaFx实现截屏——鼠标拖动选择截屏区域进行截屏,任意界面按下快捷键截屏,截屏完成后显示截屏图片

javaFx实现截屏:鼠标拖动选择截屏区域进行截屏,全局快捷键截屏,即可以在任何界面按下快捷键进行截屏,截屏完成后显示截屏图片。

c1007857613的专栏 3729

Java实现屏幕截屏

Java实现屏幕截屏功能 程序运行后的截图: 先测试一下功能: 截图过程对界面的捕捉: 双击保存后的显示界面: 后续的步骤就自己去尝试吧,这里给出了简单的测试过程。 程序结构: 代码部分显示: CaptureScreen.java类 /** * CaptureScreen.java */ import java.awt.*; import java.awt.datatransfer.D...

Code__rookie的博客 4759

Java截屏与图像处理全攻略

本文还有配套的精品资源,点击获取 简介:Java编程语言在实现截屏功能和图像处理操作方面提供了全面的支持。通过利用Java AWT和Swing库,开发者可以轻松创建图形用户界面、截取屏幕图像,并执行包括调整大小、裁剪、旋转在内的多种图像处理技术。本文将详细介绍如何使用Java进行截屏和图像处理,包括代码示例和实用技巧。 1. Java截屏实现方法 在现代的计...

weixin_32311823的博客 2061

【错误记录】Android 应用漏洞修复处理 ( 截屏攻击漏洞 | Android 系统的截屏方式 | 通过 adb 命令截屏 |Android 截屏代码 | Android 设置禁止屏幕截屏代码 )

一、Android 截屏攻击 二、Android 系统的截屏方式 三、通过 adb 命令截屏 四、Android 截屏代码 五、设置 FLAG_SECURE 标志位禁止屏幕截屏

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2855

WinCE 6.0截屏程序开发全攻略

WinCE图形子系统作为嵌入式系统中负责图形用户界面(GUI)显示与交互的重要组成部分,它不仅为用户提供直观的操作环境,同时也是实现丰富视觉效果和高效图形处理的基础。了解WinCE图形子系统的构成与工作原理,对于开发高效的截屏程序至关重要。在开发Windows CE(WinCE)图形用户界面(GUI)应用程序时,使用合适的API函数对于实现功能的丰富性、性能的优化以及代码的可维护性至关重要。

weixin_42598278的博客 1054

Java截屏工具制作教程

图形用户界面(GUI)是用户与计算机程序交互的一种方式,它使用图形符号、按钮、菜单、键盘快捷键和其他视觉元素来实现操作,以替代传统的命令行界面。Java作为一种广泛使用的编程语言,提供了强大的GUI开发工具,使得开发者能够构建出美观且功能强大的桌面应用程序。对GUI的基础知识有充分理解,是制作用户友好界面的关键步骤。Robot事件适配器是一个提供默认空实现的类,它为一些常见的事件监听接口提供基础实现。开发者可以通过继承事件适配器并重写相关的方法来简化代码。// 使用当前类作为监听器。

weixin_29607511的博客 839

AndroidR 截屏流程分析

缘起 最近App开发同事提出了一个需求,需要系统团队提供一个截屏的时候,可以过滤一些特定Layer中的内容,我这顺便记录一下调试过程。 流程 截屏流程一般通过 SurfaceControl.screenshot(frame, dw, dh, false, ROTATION_0);函数返回一个bitmap的图片。 参数包含裁剪区域sourceCrop 和旋转角度。 frameworks/base/core/java/android/view/SurfaceControl.java public static

zhongyanghu27的专栏 2656

JAVA简单实现截屏

用JAVA简单实现截屏

Android 在导航栏上添加一个截屏按键,点击进行截屏

项目中碰到要求在导航栏上添加截屏按钮的要求,因为正常截屏是在下拉状态栏中,客户截屏操作觉得太麻烦了,所以下面介绍如何实现该功能: 1,首先添加图标到导航栏上,如何添加图标请查询我之前的博客,链接:https://blog.youkuaiyun.com/lancelots/article/details/82864210 2,实现点击截屏,修改文件为PhoneStatusBar.java,路径framewo...

lancelots的博客 1983

java编程实现屏幕截图(截屏)代码总结

主要介绍了java编程实现屏幕截图(截屏)代码,结合3个实例总结分析了Java截屏时页面抓取及图片保存的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

【IIC通信】Chap.1(I2C)IIC通信原理、IIC读写时序详解

IIC通信以两根连线SDA、SCL实现了完善的全双工同步数据传送, 可以方便地构成多机系统和外围器件扩展系统。

Jie_MSD的博客 2万+

JAVA截屏程序

JAVA截屏程序,主要修改了如下的地方: 1,修复了选择选区后,再改变大小时,当把右侧的边框拖过左侧或者左侧的边框拖到右侧或者上面的边框拖过下面,只会显示一条边框的BUG. 2,在没有截屏的时候,会有一条提示的字符串跟着鼠标走. 3,在点了截屏之后,主窗口会先隐藏起来,截完图后才会弹出来 4,去掉了截屏时的自定义鼠标显示,因为这样的话,源代码编译之后,运行会出问题,因为别人的电脑上没有我那...

有问题吗? 190

Oracle恢复学习实战小结

     学习oracle10g 043课程有段时间了,前一两个星期学习了backup/restore相关的内容,刚好公司有要求要为host服务器做一个备用机以防止数据意外丢失。于是,实战开始了。     首先介绍host服务器架构。host以oracle数据库作为底层数据存储,以公司总部开发的Santorin作为应用,主要提供给测试台架数据存储、数据访问、数据导入导出、用户权限管理和数据自动备份

kseawolfk的专栏 1035

打破应用截屏限制:Android设备截屏自由的终极解决方案

你是否曾经遇到过这样的情况:想要截屏保存重要的交流内容、游戏精彩瞬间或文档资料,却发现应用提示"禁止截屏"?这种限制不仅令人沮丧,还可能让你错失保存重要信息的机会。今天,我们将为你揭示如何彻底打破这一限制,让截屏自由成为现实。 ## 用户痛点:为什么我们需要截屏自由? 在日常使用Android设备的过程中,截屏限制带来的困扰无处不在: **信息保存受阻** - 金融应用中的重要投资建议无法截

gitblog_00427的博客 3564

第二章-Ethernet/IP基本概念

在I/O连接中,一旦连接建立,就不会有请求-响应数据,只会按照连接建立时指定的生产触发器所确定的时间间隔生产和消耗带有ConnectionID的数据。连接是通过连接管理器对象的Forward请求服务建立的,ForwardOpen请求包含所有连接参数,包括传输类、生产触发器、定时信息、电子密钥和连接ID。I/O适配器:I/O适配器从I/O扫描器接收隐式通信连接请求,然后以请求的速率生成I/O数据。I/O扫描器:启动与I/O适配器的隐式通信,需要处理连接的配置以及如何配置适配器。扫描器还支持启动显式报文。

_Nooice的博客 1233

【Linux命令大全】006.网络通讯之netstat命令(实操篇)

本文详细介绍了Linux系统中netstat网络诊断命令的实用技巧。主要内容包括:1) 基本功能与参数详解,展示如何查看网络连接、路由表和接口统计;2) 安装方法及基础用法,如查看TCP/UDP连接、显示进程信息和路由表;3) 高级应用技巧,包括监听端口检查、连接状态统计和实时监控。文章通过表格和代码示例,系统性地呈现了netstat在系统管理中的核心应用场景,是网络故障排查和性能监控的实用指南。

yuhuasheng1997的博客 705
上一篇: [原创]手机助手
下一篇: JAVA模仿屏保
hadeslbf
博客等级 码龄20年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值