`

Swing 实现截图小软件 (五)

阅读更多

应大家的要求, 继续完善截图小软件。 这次增加两个功能:

 

1. 鼠标截图时,直接复制到系统剪贴板,同时增加一个 在屏幕中维持两秒钟的 复制完成提示。

2. 增加键盘 "Print Screen" 键的监听,直接启动截图。

 

 

先来看第一个功能:

 

a. 截图时,直接复制到系统剪贴板

 

这个比较简单,直接在 ScreenWindow 类的 mouseRelease() 方法中,增加一句:

//将图片保存到系统剪贴板
GraphicsUtils.setClipboardImage(image);

 即可。

 

b. 增加个 能在屏幕中维持两秒钟的 问题提示。  效果如图:


要让此提示在系统屏幕中间,出现且两秒钟后,消失。

 

提示类代码:

package prx.swing.snapshoot;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.JDialog;
import javax.swing.JPanel;

import com.sun.awt.AWTUtilities;

/**
 * 屏幕提示文字工具类
 * @author pengranxiang
 */
public class ScreenTip {
	//以对话框形式出现,防止在系统任务栏出现一个窗口最小化时的图标
	private static JDialog frame = new JDialog();
	
	static {
		frame.setAlwaysOnTop(true);	//设置对话框为 顶层窗口
        frame.setUndecorated(true);	//取消对话口的窗口框
        frame.setSize(300, 100);	
        frame.setLocationRelativeTo(null);	//居中
        AWTUtilities.setWindowOpaque(frame, false);	// 设置对话框为透明。 此方法需要 JDK6 以上

        //显示文字用的容器
        final JPanel pane = new JPanel() {
        	/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			//在容器中绘制提示文字
			protected void paintComponent(Graphics g) {
        		super.paintComponent(g);
        		
        		g.setColor(Color.RED);
        		g.setFont(new Font("宋体", Font.BOLD, 20));
        		g.drawString("贴图已复制到系统剪贴板", 10, 50);
        		
        	}
        };
        
        //设置容器最适应大小
        pane.setPreferredSize(new Dimension(frame.getWidth(), frame.getHeight()));
        //设置容器为透明
        pane.setOpaque(false);

        frame.setLayout(new BorderLayout());
        frame.add(pane);
        
        
        
	}

	public static void showTip() {
		Thread thread;
		
		thread = new Thread(new Runnable() {
        	public void run() {
        		frame.setVisible(true);
        		try {
					Thread.sleep(1500);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
        		frame.setVisible(false);
        	}
        });
		thread.start();
	}
	
	public static void main(String[] args) {
		ScreenTip.showTip();
	}
}
 

 运行上面代码,即可出现  --- 在屏幕显示提示文字 两秒钟。   上面的程序,文字消失后,程序没有退出哦, 记得退出。

 

那么在刚才的代码中,复制到剪贴板后,增加一句:

ScreenTip.showTip();

 即可出现提示。

 

 

再来看第二个功能:监听键盘的 PrintScreen 键

 

这个比较麻烦, 先来做个小实验:

 

代码如下:

package prx.swing.snapshoot;

import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(400, 100);
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
		
		JLabel label = new JLabel("The PrintScreenKey Code: ");
		JLabel codeLabel = new JLabel(KeyEvent.VK_PRINTSCREEN + "");
		
		JLabel label2 = new JLabel("You Pressed Key Code: ");
		final JLabel codeLabel2 = new JLabel();
		
		frame.setLayout(new GridLayout(2, 2));
		frame.add(label);
		frame.add(codeLabel);
		frame.add(label2);
		frame.add(codeLabel2);
		
		frame.addKeyListener(new KeyListener() {

			public void keyPressed(KeyEvent e) {
				codeLabel2.setText(e.getKeyCode() + "");
			}

			public void keyReleased(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}

			public void keyTyped(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}
			
		});
		
		frame.setVisible(true);
	}
}

 这个是键盘监听测试。 运行上面的代码,如图:


我们需要监听的 键 是  "PrintScreen/SysRq" 其键盘代码为 : 154

 

第二行为当前我们监听键盘按下的键的代码。

 

测试中会发现: 键盘中所有的键,除了 "Tab"  和 "PrintScreen" 这两个键,其他的都能监听。

 

所以使用 KeyListener 是无法监听  “PrintScreen”键的。

 

 

于是在这里卡住了。 翻了N久 的资料后, 发现可以通过 Toolkit 的

 

addAWTEventListener(AWTEventListener listener, long eventMask)

 

来接受键盘事件。于是改变方案为:

package prx.swing.snapshoot;

import java.awt.AWTEvent;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(400, 100);
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
		
		JLabel label = new JLabel("The PrintScreenKey Code: ");
		JLabel codeLabel = new JLabel(KeyEvent.VK_PRINTSCREEN + "");
		
		JLabel label2 = new JLabel("You Pressed Key Code: ");
		final JLabel codeLabel2 = new JLabel();
		
		frame.setLayout(new GridLayout(2, 2));
		frame.add(label);
		frame.add(codeLabel);
		frame.add(label2);
		frame.add(codeLabel2);
		
		Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
            public void eventDispatched(AWTEvent ae) {
                if (ae instanceof KeyEvent) {
                    KeyEvent e = (KeyEvent) ae;  
                    if(e.getKeyCode() != 0)  codeLabel2.setText(e.getKeyCode() + "");
                }
            }
        }, AWTEvent.KEY_EVENT_MASK);
		
		frame.setVisible(true);
	}
}
 

这次可以顺利监听 "PrintScreen" 和 "Tab" 键了。


既然 “PrintScreen”的监听搞定了, 那在 监听中直接调用 截图方法即可。

 

最后运行结果:

 


完成代码中附件: SnapShoot.jar 中。

  • 大小: 257.4 KB
  • 大小: 7 KB
  • 大小: 6.7 KB
  • 大小: 21.4 KB
分享到:
评论
1 楼 hk8082 2011-03-31  
很强大,收藏慢慢学习

相关推荐

    java swing 截屏软件实现

    java swing 截屏软件实现,下载文件导入eclipse即可,可运行。

    swing实现的仿qq截图小工具

    swing实现的仿qq截图小工具 功能比较完善 项目可直接导入Eclipse中 也可直接运行jar包查看效果

    java swing 实现的带启动界面的简易截图软件

    java swing 实现的带启动界面的简易截图软件,启动界面有进度条,可保存可粘贴到qq微信,简单实用

    java swing实现学生住宿管理系统(源码)

    java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java ...

    javaswing实现贪吃蛇源码

    java贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇...

    使用Java Swing实现了抖音上的表白程序

    最后,作者想说的是,1.9块钱的资源,你买不了吃亏,买不了上当,只需省一片绿箭口香糖的钱,你就能拥有一个用于整蛊的Java Swing实现,你在玩的过程中,还可以初步了解一些Java Swing的知识,如此说来,少年,抓紧时间下载吧。

    java小游戏 (源码)swing五子棋源代码

    java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源...

    Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip

    Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip

    Java swing实现的一款餐厅点餐系统

    本项目是一套Java swing实现的一款餐厅点餐系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试,...

    java swing mysql实现的酒店管理系统项目源码.zip

    java swing mysql实现的酒店管理系统项目源码.zip java swing mysql实现的酒店管理系统项目源码.zip java swing mysql实现的酒店管理系统项目源码.zip java swing mysql实现的酒店管理系统项目源码.zip java swing ...

    简单的JDBC+swing管理系统java实现

    这个java项目是一个基于数据库的简单jdbc项目,只要在自己数据库中建立相应的表就可以实现操作。比较简单,可以帮助大家学习.

    java swing和jgraph实现的故障分析树软件,可执行jar文件,源码和文档

    使用java swing和开源jar包jgraph完成的故障分析树软件。包含可执行jar文件,源代码,以及说明文档和演示的PPT,视频。 图形界面美观,自动由公式生成树形结构,也可以用鼠标增删改。支持图形和公式编辑以及切换。

    基于java swing实现的贪吃蛇小游戏源码+可执行的jar文件

    基于java swing实现的贪吃蛇小游戏源码+可执行的jar文件

    基于Java swing和mysql实现的银行管理系统【内含数据库+附源码】

    本项目是一套基于Java swing和mysql实现的银行管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。...

    java swing做的通讯录软件连接sql

    自己做的通讯录,主要是练习的,对初学者有用 导入工程之后要重新添加sqljdbc驱动,数据库没有给出,不过有创建数据库的语句了 采用布局管理,图片是直接存入数据库的(建议不用这个方法)

    Java swing实现学生信息管理系统源码.zip

    《Java Swing实现学生信息管理系统》是一个基于Java Swing GUI工具集开发的应用程序,旨在提供一个高效、直观的方式来管理学校或教育机构中学生的信息。该系统的核心功能包括学生信息的录入、查询、更新和删除。通过...

    java swing屏幕截图工具BS(源码+视频+文档+ppt)

    基于java的QQ截屏工具的设计和实现能够实现对屏幕的随机截取,复制,保存以及添加文字等操作,便于用户对数据的处理。 该软件的功能: (1)随机获取屏幕指定区域; (2)编辑(添加文字)截图; (3)存储...

    Java swing实现学生信息管理系统源码

    这款Java swing实现的学生信息管理系统和jsp版本的功能很相似,简单的实现了班级信息的增删改查,学生信息的增删改查,数据库采用的是mysql,jdk版本不限,是Java学习者学习参考非常好的一个小项目

    java swing实现考勤工时计算工具

    使用java swing技术实现的考勤工时计算工具,是有人找我专门定制的,通过ecxel报表上送考勤记录后再进行计算,数据存储使用的是sqllite

Global site tag (gtag.js) - Google Analytics