有些时候截屏是很有必要的,可是不可能每次都开着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编程语言实现的图形用户界面(GUI)工具,用于捕获和保存计算机屏幕上的图像。本程序的特色在于它提供了与QQ截图类似的功能,这意味着它可能包括了区域选择、实时预览、编辑工具以及快速...
java截屏程序
在"Swing学习之两个java截屏程序的实现"这个主题中,我们将探讨如何利用Swing和Java的一些基本功能来开发屏幕截图应用程序。这里有两个关键的Java类文件:CaptureScreen.java和RobotToolMain.java,它们分别代表了两...
其中之一就是实现屏幕截图功能,这在“基于swing的Java截屏程序”中得到了体现。本程序提供了两种不同的方法来实现屏幕抓取,使得开发者能够根据项目需求选择最适合的方式。 首先,我们可以探讨第一种实现方式。在...
Java编写的截屏程序是一种利用Java编程语言实现的桌面屏幕捕获工具,它允许用户从计算机屏幕上抓取图像。在Java中实现截屏功能主要涉及Java的图形...通过这些知识点的组合,我们可以构建出一个功能丰富的Java截屏程序。
java 截屏 程序。效果类似qq截屏,不知道有没有高手能把他应用在web页面上!如果有人知道web截屏怎么实现,请告诉我啊,感谢先!
在Java编程环境中,实现一个截屏程序是一项实用的技术,尤其在远程控制或自动化测试场景下。本篇文章将详细探讨如何利用Java的相关API实现这一功能,主要涉及`java.awt`, `java.awt.image` 和 `javax.imageio` 包中...
纯java编写的截图小工具,可供参考,放在一个java文件,会有点乱
Java截图程序是利用Java的Swing库来实现的一种桌面应用程序功能,它允许用户截取屏幕上的任何区域并保存为图像文件。Swing是Java提供的一个用于构建图形用户界面(GUI)的工具包,包含了丰富的组件和功能,可以方便...
【标题】"桌面截屏小程序"是一个用于快速捕获并保存桌面全屏图像的应用程序,它以Java编程语言实现,并且包含一个可运行的JAR文件。这样的小程序通常使用Java的图形用户界面(GUI)库,如Java AWT或Swing来创建用户...
java截屏小程序 附源码,不能登QQ的时候可以讲究下,jar格式的,运行鼠标框选截屏内容,右键点击保存或退出。java新手,望多指教
【Java桌面截图程序】是一个利用Java编程语言实现的桌面截屏工具,它的主要功能是允许用户在计算机桌面上快速捕获屏幕快照。这个程序包含了完整的源代码,开发者可以研究和学习,也可以作为基础进行二次开发。由于它...
【Java截图小程序】是一款小巧而实用的工具,它利用Java编程语言实现,允许用户方便地进行屏幕截图并可能提供一些额外的功能,如保存、编辑或分享截图。在本篇文章中,我们将深入探讨Java中实现截图功能的核心技术...
Java编写的截图小程序是一个实用的桌面工具,它允许用户快速捕获屏幕上的任何区域,并进行进一步的操作,如保存、编辑或分享。这个程序是用Java编程语言实现的,利用了Java丰富的图形用户界面(GUI)库和事件处理...
【Java 截图小程序】是一种基于Java编程语言开发的应用,主要功能是实现屏幕截图并进行一系列的辅助操作。这个小程序不仅能够捕捉用户屏幕上的任何区域,保存为图像文件,还能在截图上获取像素的ARGB(Alpha, Red, ...
Java截屏小程序是一种实用工具,它允许用户在Java环境中实现屏幕捕获功能。这个程序能够创建PNG、JPG和GIF三种格式的图像文件,满足了不同场景下的需求。源码的提供使得开发者可以直接查看和学习其内部实现,进一步...
【JAVA定时截屏小程序...通过这些技术的组合,JAVA定时截屏小程序实现了自动化和定制化的截图服务,为Windows用户提供了一种便捷的屏幕记录工具。开发者可以根据需求进一步扩展功能,比如添加邮件发送、云存储集成等。
国家开放大学的"Java语言程序设计"课程旨在帮助学生掌握Java编程基础,理解面向对象编程的概念,以及如何利用Java进行实际的软件开发。形考任务3作为课程的一部分,通常会涉及更深入的编程技巧和概念,例如异常处理...
在Java编程语言中,实现截屏功能并不复杂,主要依赖于Java AWT(Abstract Window Toolkit)库...总的来说,Java的Robot类为开发者提供了一种强大且灵活的方式来与操作系统进行交互,实现各种自动化任务,包括屏幕截图。