`

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  
很强大,收藏慢慢学习

相关推荐

    swing实现的仿qq截图小工具

    本项目是使用Swing实现的一个仿QQ截图小工具,它旨在提供类似QQ截图的功能,让用户在桌面环境中能够方便地进行屏幕截图并进行编辑。 首先,Swing组件库提供了丰富的组件,如JFrame、JButton、JPanel等,这些组件...

    java swing 截屏软件实现

    以下是对这个"java swing 截屏软件实现"的详细知识点解析: 1. **Swing组件**: Swing提供了一套丰富的组件库,如JFrame、JButton、JLabel等,用于构建用户界面。在这个截屏软件中,可能会用到JFrame作为主窗口,...

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

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

    java swing实现pdf阅读器

    总的来说,用Java Swing实现一个PDF阅读器是一个涉及多方面技能的任务,包括对PDF格式的理解、Java GUI编程、IO操作以及第三方库的熟练使用。通过不断学习和实践,可以构建出功能强大且用户友好的PDF阅读器。

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

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

    Swing小管理项目源码

    【Swing小管理项目源码】是一个基于Java Swing开发的桌面应用程序示例,它涵盖了多个核心功能,包括用户界面的设计、数据操作以及交互逻辑。Swing是Java的标准库,用于构建图形用户界面(GUI),提供了丰富的组件库...

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

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

    javaswing实现贪吃蛇源码

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

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

    这个“Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip”文件是一个示例项目,展示了如何利用Swing构建一个基本的多用户聊天应用。下面将详细阐述其涉及的关键知识点。 1. **Swing组件**:Swing提供了丰富的...

    基于Java Swing实现的日历记事本系统【源码+报告文档】

    本项目是一套基于Java Swing实现的日历记事本系统,主要针对计算机相关专业的正在学习java的学生与需要项目实战练习的Java学习者。 包含:项目源码、报告文档等。 项目都经过严格调试,确保可以运行! 该系统功能...

    JAVA Swing 实现商品列表,数量加减 ,删除整行 Demo

    在这个特定的Demo中,我们关注的是如何使用Swing来实现一个商品列表,其中包含商品的数量加减功能以及整行删除的功能。这个功能通常在电商应用或者库存管理软件中会用到。 首先,我们需要了解`JTable`,这是Swing中...

    java swing写的聊天软件

    本项目"java swing写的聊天软件"利用了Swing组件来设计和实现了一个能够支持多达1000个用户同时在线的聊天应用。以下是关于这个聊天软件的关键知识点和实现细节: 1. **Swing组件库**:Swing 提供了丰富的组件,如...

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

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

    基于Java swing组件实现简易计算器

    8. Java swing组件的使用:Java swing组件可以用于创建各种图形化用户界面,例如计算器、游戏、聊天软件等。 9. 计算器的实现:计算器是Java swing组件中的一种常见应用,通过使用JFrame、JButton、JPanel、...

    Swing写的一个简易记事小软件

    标题中的“Swing写的一个简易记事小软件”指的是使用Java Swing库开发的一款简单应用程序,主要用于记录日常事项。Swing是Java提供的一种图形用户界面(GUI)工具包,它允许开发者创建桌面应用,包括窗口、按钮、...

    java 截屏 swing

    "java 截屏 swing"这个主题涉及到的是如何利用Swing来实现屏幕截图功能。在这个项目中,开发人员创建了一个应用程序,允许用户选择屏幕上的任意矩形区域进行截图,未被选中的部分会显示为阴影效果,同时支持拖动和...

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

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

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

    【Java Swing制作的通讯录软件与SQL数据库连接】 在编程领域,Java Swing 是一个用于创建图形用户界面(GUI)的工具包,它提供了丰富的组件和功能,使得开发者能够构建出功能完善的桌面应用。本项目是一个基于Java ...

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

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

Global site tag (gtag.js) - Google Analytics