应大家的要求, 继续完善截图小软件。 这次增加两个功能:
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
分享到:
相关推荐
本项目是使用Swing实现的一个仿QQ截图小工具,它旨在提供类似QQ截图的功能,让用户在桌面环境中能够方便地进行屏幕截图并进行编辑。 首先,Swing组件库提供了丰富的组件,如JFrame、JButton、JPanel等,这些组件...
以下是对这个"java swing 截屏软件实现"的详细知识点解析: 1. **Swing组件**: Swing提供了一套丰富的组件库,如JFrame、JButton、JLabel等,用于构建用户界面。在这个截屏软件中,可能会用到JFrame作为主窗口,...
java swing 实现的带启动界面的简易截图软件,启动界面有进度条,可保存可粘贴到qq微信,简单实用
总的来说,用Java Swing实现一个PDF阅读器是一个涉及多方面技能的任务,包括对PDF格式的理解、Java GUI编程、IO操作以及第三方库的熟练使用。通过不断学习和实践,可以构建出功能强大且用户友好的PDF阅读器。
java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java swing实现学生住宿管理系统(源码) java ...
【Swing小管理项目源码】是一个基于Java Swing开发的桌面应用程序示例,它涵盖了多个核心功能,包括用户界面的设计、数据操作以及交互逻辑。Swing是Java的标准库,用于构建图形用户界面(GUI),提供了丰富的组件库...
最后,作者想说的是,1.9块钱的资源,你买不了吃亏,买不了上当,只需省一片绿箭口香糖的钱,你就能拥有一个用于整蛊的Java Swing实现,你在玩的过程中,还可以初步了解一些Java Swing的知识,如此说来,少年,抓紧时间下载吧。
java贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇javaswing实现贪吃蛇...
这个“Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip”文件是一个示例项目,展示了如何利用Swing构建一个基本的多用户聊天应用。下面将详细阐述其涉及的关键知识点。 1. **Swing组件**:Swing提供了丰富的...
本项目是一套基于Java Swing实现的日历记事本系统,主要针对计算机相关专业的正在学习java的学生与需要项目实战练习的Java学习者。 包含:项目源码、报告文档等。 项目都经过严格调试,确保可以运行! 该系统功能...
在这个特定的Demo中,我们关注的是如何使用Swing来实现一个商品列表,其中包含商品的数量加减功能以及整行删除的功能。这个功能通常在电商应用或者库存管理软件中会用到。 首先,我们需要了解`JTable`,这是Swing中...
本项目"java swing写的聊天软件"利用了Swing组件来设计和实现了一个能够支持多达1000个用户同时在线的聊天应用。以下是关于这个聊天软件的关键知识点和实现细节: 1. **Swing组件库**: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写的一个简易记事小软件”指的是使用Java Swing库开发的一款简单应用程序,主要用于记录日常事项。Swing是Java提供的一种图形用户界面(GUI)工具包,它允许开发者创建桌面应用,包括窗口、按钮、...
"java 截屏 swing"这个主题涉及到的是如何利用Swing来实现屏幕截图功能。在这个项目中,开发人员创建了一个应用程序,允许用户选择屏幕上的任意矩形区域进行截图,未被选中的部分会显示为阴影效果,同时支持拖动和...
《Java Swing实现学生信息管理系统》是一个基于Java Swing GUI工具集开发的应用程序,旨在提供一个高效、直观的方式来管理学校或教育机构中学生的信息。该系统的核心功能包括学生信息的录入、查询、更新和删除。通过...
【Java Swing制作的通讯录软件与SQL数据库连接】 在编程领域,Java Swing 是一个用于创建图形用户界面(GUI)的工具包,它提供了丰富的组件和功能,使得开发者能够构建出功能完善的桌面应用。本项目是一个基于Java ...
本项目是一套Java swing实现的一款餐厅点餐系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试,...