`
lbfhappy
  • 浏览: 83247 次
社区版块
存档分类
最新评论

JAVA截屏程序

阅读更多
有些时候截屏是很有必要的,可是不可能每次都开着QQ在那里截吧,也不可能按print sreen键,再后把整个桌面都截下来吧,这个时候,有一个自己的截屏程序是很有必要的,并且可以自己截成任意大小,任意位置.用法和当时QQ的截屏差不多.可以选区拖动,缩放选区,双击保存,右键选区是取消选区,右键别的地方是退出截屏程序.
<!---->/*
 * CaptureScreen.java
 *
 * Created on 2006年9月7日, 上午10:59
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 
*/

package test1;

/**
 *
 * 
@author lbf
 
*/
import java.awt.*;
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,save;
    
private JPanel c;
    
private BufferedImage get;
    
/** Creates a new instance of CaptureScreen */
    
public CaptureScreen() {
        
super("屏幕截取软件");
        initWindow();
    }
    
private void initWindow(){
        start
=new JButton("开始截取");
        cancel
=new JButton("退出");
        save
=new JButton("保存");
        save.setEnabled(
false);
        save.addActionListener(
this);
        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(save);
        buttonJP.add(cancel);
        
this.getContentPane().add(c,BorderLayout.CENTER);
        
this.getContentPane().add(buttonJP,BorderLayout.SOUTH);
        
this.setSize(300,300);
        
this.setLocationRelativeTo(null);
        
this.setVisible(true);
        
this.setAlwaysOnTop(true);
        
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
private void updates(){
        
if(get!=null){
            ImageIcon ii
=new ImageIcon(get);
            JLabel jl
=new JLabel(ii);
            c.removeAll();
            c.add(
new JScrollPane(jl),BorderLayout.CENTER);
            SwingUtilities.updateComponentTreeUI(
this);
        }
    }
    
private void doStart(){
        
try{
            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();
            jf.getContentPane().add(
new Temp(jf,bi,di.width,di.height));
            jf.setUndecorated(
true);
            jf.setSize(di);
            jf.setVisible(
true);
            jf.setAlwaysOnTop(
true);
        } 
catch(Exception exe){
            exe.printStackTrace();
        }
    }
    
private void doSave(){
        
try{
            JFileChooser jfc
=new JFileChooser(".");
            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";
                    }
                }
                
                
if(ImageIO.write(get,about,file)){
                    JOptionPane.showMessageDialog(
this,"保存成功!");
                    save.setEnabled(
false);
                } 
else
                    JOptionPane.showMessageDialog(
this,"保存失败!");
            }
        } 
catch(Exception exe){
            exe.printStackTrace();
        }
    }
    
public void actionPerformed(ActionEvent ae){
        
if(ae.getSource()==start){
            doStart();
        } 
else if(ae.getSource()==cancel){
            System.exit(
0);
        } 
else if(ae.getSource()==save){
            doSave();
        }
    }
    
//一个文件后缀名选择器
    private class JPGfilter extends javax.swing.filechooser.FileFilter{
        
public JPGfilter(){
            
        }
        
public boolean accept(File file){
            
if(file.toString().toLowerCase().endsWith(".jpg")||
                    file.toString().toLowerCase().endsWith(
".jpeg")||
                    file.isDirectory()){
                
return true;
            } 
else
                
return false;
        }
        
public String getDescription(){
            
return "*.JPG,*.JPEG(JPG,JPEG图像)";
        }
    }
    
private class PNGfilter extends javax.swing.filechooser.FileFilter{
        
public boolean accept(File file){
            
if(file.toString().toLowerCase().endsWith(".png")||
                    file.isDirectory()){
                
return true;
            } 
else
                
return false;
        }
        
public String getDescription(){
            
return "*.PNG(PNG图像)";
        }
    }
    
//一个暂时类,用于显示当前的屏幕图像
    private class Temp extends JPanel implements MouseListener,MouseMotionListener{
        
private BufferedImage bi;
        
private int width,height;
        
private int startX,startY,endX,endY,tempX,tempY;
        
private JFrame jf;
        
private Rectangle select=new Rectangle(0,0,0,0);//表示选中的区域
        private Cursor cs;//表示一般情况下的鼠标状态
        private States current=States.DEFAULT;// 表示当前的编辑状态
        private Rectangle[] rec;//表示八个编辑点的区域
        public Temp(JFrame jf,BufferedImage bi,int width,int height){
            
this.jf=jf;
            
this.bi=bi;
            
this.width=width;
            
this.height=height;
            
this.addMouseListener(this);
            
this.addMouseMotionListener(this);
            Image icon
=Toolkit.getDefaultToolkit().createImage(this.getClass().getResource("icon.png"));
            cs
=Toolkit.getDefaultToolkit().createCustomCursor(icon,new Point(0,0),"icon");
            
this.setCursor(cs);
            initRecs();
        }
        
private void initRecs(){
            rec
=new Rectangle[8];
            
for(int i=0;i<rec.length;i++){
                rec[i]
=new Rectangle();
            }
        }
        
public void paintComponent(Graphics g){
            g.drawImage(bi,
0,0,width,height,this);
            g.setColor(Color.RED);
            g.drawLine(startX,startY,endX,startY);
            g.drawLine(startX,endY,endX,endY);
            g.drawLine(startX,startY,startX,endY);
            g.drawLine(endX,startY,endX,endY);
            
int x=startX<endX?startX:endX;
            
int y=startY<endY?startY:endY;
            select
=new Rectangle(x,y,Math.abs(endX-startX),Math.abs(endY-startY));
            
int x1=(startX+endX)/2;
            
int y1=(startY+endY)/2;
            g.fillRect(x1
-2,startY-2,5,5);
            g.fillRect(x1
-2,endY-2,5,5);
            g.fillRect(startX
-2,y1-2,5,5);
            g.fillRect(endX
-2,y1-2,5,5);
            g.fillRect(startX
-2,startY-2,5,5);
            g.fillRect(startX
-2,endY-2,5,5);
            g.fillRect(endX
-2,startY-2,5,5);
            g.fillRect(endX
-2,endY-2,5,5);
            rec[
0]=new Rectangle(x-5,y-5,10,10);
            rec[
1]=new Rectangle(x1-5,y-5,10,10);
            rec[
2]=new Rectangle((startX>endX?startX:endX)-5,y-5,10,10);
            rec[
3]=new Rectangle((startX>endX?startX:endX)-5,y1-5,10,10);
            rec[
4]=new Rectangle((startX>endX?startX:endX)-5,(startY>endY?startY:endY)-5,10,10);
            rec[
5]=new Rectangle(x1-5,(startY>endY?startY:endY)-5,10,10);
            rec[
6]=new Rectangle(x-5,(startY>endY?startY:endY)-5,10,10);
            rec[
7]=new Rectangle(x-5,y1-5,10,10);
        }
        
public void mouseMoved(MouseEvent me){
            
if(select.contains(me.getPoint())){
                
this.setCursor(new Cursor(Cursor.MOVE_CURSOR));
                current
=States.MOVE;
            } 
else{
                States[] st
=States.values();
                
for(int i=0;i<rec.length;i++){
                    
if(rec[i].contains(me.getPoint())){
                        current
=st[i];
                        
this.setCursor(st[i].getCursor());
                        
return;
                    }
                }
                
this.setCursor(cs);
                current
=States.DEFAULT;
            }
        }
        
public void mouseExited(MouseEvent me){
            
        }
        
public void mouseEntered(MouseEvent me){
            
        }
        
public void mouseDragged(MouseEvent me){
            
int x=me.getX();
            
int y=me.getY();
            
if(current==States.MOVE){
                startX
+=(x-tempX);
                startY
+=(y-tempY);
                endX
+=(x-tempX);
                endY
+=(y-tempY);
                tempX
=x;
                tempY
=y;
            }
else if(current==States.EAST){
                
if(startX>endX){
                    startX
+=(x-tempX);
                    tempX
=x;
                } 
else{
                    endX
+=(x-tempX);
                    tempX
=x;
                }
            }
else if(current==States.NORTH){
                
if(startY<endY){
                    startY
+=(y-tempY);
                    tempY
=y;
                }
else{
                    endY
+=(y-tempY);
                    tempY
=y;
                }
            }
else if(current==States.WEST){
                
if(startX<endX){
                    startX
+=(x-tempX);
                    tempX
=x;
                } 
else{
                    endX
+=(x-tempX);
                    tempX
=x;
                }
            }
else if(current==States.SOUTH){
                
if(startY>endY){
                    startY
+=(y-tempY);
                    tempY
分享到:
评论

相关推荐

    功能比较完善的JAVA截图程序

    Java截图程序是一种基于Java编程语言实现的图形用户界面(GUI)工具,用于捕获和保存计算机屏幕上的图像。本程序的特色在于它提供了与QQ截图类似的功能,这意味着它可能包括了区域选择、实时预览、编辑工具以及快速...

    java截屏程序

    java截屏程序

    Swing学习之两个java截屏程序的实现

    在"Swing学习之两个java截屏程序的实现"这个主题中,我们将探讨如何利用Swing和Java的一些基本功能来开发屏幕截图应用程序。这里有两个关键的Java类文件:CaptureScreen.java和RobotToolMain.java,它们分别代表了两...

    基于swing的Java截屏程序

    其中之一就是实现屏幕截图功能,这在“基于swing的Java截屏程序”中得到了体现。本程序提供了两种不同的方法来实现屏幕抓取,使得开发者能够根据项目需求选择最适合的方式。 首先,我们可以探讨第一种实现方式。在...

    java写的截屏程序

    Java编写的截屏程序是一种利用Java编程语言实现的桌面屏幕捕获工具,它允许用户从计算机屏幕上抓取图像。在Java中实现截屏功能主要涉及Java的图形...通过这些知识点的组合,我们可以构建出一个功能丰富的Java截屏程序。

    java 截屏 程序

    java 截屏 程序。效果类似qq截屏,不知道有没有高手能把他应用在web页面上!如果有人知道web截屏怎么实现,请告诉我啊,感谢先!

    java中截屏程序(java版 创新)

    在Java编程环境中,实现一个截屏程序是一项实用的技术,尤其在远程控制或自动化测试场景下。本篇文章将详细探讨如何利用Java的相关API实现这一功能,主要涉及`java.awt`, `java.awt.image` 和 `javax.imageio` 包中...

    java截图程序

    纯java编写的截图小工具,可供参考,放在一个java文件,会有点乱

    Java实现截图程序

    Java截图程序是利用Java的Swing库来实现的一种桌面应用程序功能,它允许用户截取屏幕上的任何区域并保存为图像文件。Swing是Java提供的一个用于构建图形用户界面(GUI)的工具包,包含了丰富的组件和功能,可以方便...

    桌面截屏小程序

    【标题】"桌面截屏小程序"是一个用于快速捕获并保存桌面全屏图像的应用程序,它以Java编程语言实现,并且包含一个可运行的JAR文件。这样的小程序通常使用Java的图形用户界面(GUI)库,如Java AWT或Swing来创建用户...

    java截屏小程序 附源码

    java截屏小程序 附源码,不能登QQ的时候可以讲究下,jar格式的,运行鼠标框选截屏内容,右键点击保存或退出。java新手,望多指教

    JAVA桌面截图程序

    【Java桌面截图程序】是一个利用Java编程语言实现的桌面截屏工具,它的主要功能是允许用户在计算机桌面上快速捕获屏幕快照。这个程序包含了完整的源代码,开发者可以研究和学习,也可以作为基础进行二次开发。由于它...

    java截图小程序

    【Java截图小程序】是一款小巧而实用的工具,它利用Java编程语言实现,允许用户方便地进行屏幕截图并可能提供一些额外的功能,如保存、编辑或分享截图。在本篇文章中,我们将深入探讨Java中实现截图功能的核心技术...

    Java写的截图小程序,源码

    Java编写的截图小程序是一个实用的桌面工具,它允许用户快速捕获屏幕上的任何区域,并进行进一步的操作,如保存、编辑或分享。这个程序是用Java编程语言实现的,利用了Java丰富的图形用户界面(GUI)库和事件处理...

    java 截图 小程序

    【Java 截图小程序】是一种基于Java编程语言开发的应用,主要功能是实现屏幕截图并进行一系列的辅助操作。这个小程序不仅能够捕捉用户屏幕上的任何区域,保存为图像文件,还能在截图上获取像素的ARGB(Alpha, Red, ...

    java截屏小程序

    Java截屏小程序是一种实用工具,它允许用户在Java环境中实现屏幕捕获功能。这个程序能够创建PNG、JPG和GIF三种格式的图像文件,满足了不同场景下的需求。源码的提供使得开发者可以直接查看和学习其内部实现,进一步...

    JAVA定时截屏小程序

    【JAVA定时截屏小程序...通过这些技术的组合,JAVA定时截屏小程序实现了自动化和定制化的截图服务,为Windows用户提供了一种便捷的屏幕记录工具。开发者可以根据需求进一步扩展功能,比如添加邮件发送、云存储集成等。

    国家开放大学Java语言程序设计形考任务3

    国家开放大学的"Java语言程序设计"课程旨在帮助学生掌握Java编程基础,理解面向对象编程的概念,以及如何利用Java进行实际的软件开发。形考任务3作为课程的一部分,通常会涉及更深入的编程技巧和概念,例如异常处理...

    JAVA简单实现截屏

    在Java编程语言中,实现截屏功能并不复杂,主要依赖于Java AWT(Abstract Window Toolkit)库...总的来说,Java的Robot类为开发者提供了一种强大且灵活的方式来与操作系统进行交互,实现各种自动化任务,包括屏幕截图。

Global site tag (gtag.js) - Google Analytics