`

java swing增加全局快捷键

阅读更多

最近在改进密码管理系统,



 

突然想到可以为它增加全局快捷键,比如:

Ctrl+Enter,触发【refresh】按钮,按【Page Up】、【Page Down】进行翻页,按【Home】跳转到第一页;按【End】跳转到最后一页。

代码如下:

Toolkit toolkit = Toolkit.getDefaultToolkit();
					// 注册应用程序全局键盘事件, 所有的键盘事件都会被此事件监听器处理.
					toolkit.addAWTEventListener(
							new java.awt.event.AWTEventListener() {
								public void eventDispatched(AWTEvent event) {
									if (event.getClass() == KeyEvent.class) {
										KeyEvent kE = ((KeyEvent) event);
										// 处理按键事件 Ctrl+Enter
										if ((kE.getKeyCode() == KeyEvent.VK_ENTER)
												&& (((InputEvent) event)
														.isControlDown())) {

											window.refreshAction();
										} /* page down */else if (kE.getKeyCode() == KeyEvent.VK_PAGE_DOWN
												&& kE.getID() == KeyEvent.KEY_PRESSED) {
											window.nextPageAction();
											// System.out.println("page down:"
											// + kE.getID());

										} /* page up */else if (kE.getKeyCode() == KeyEvent.VK_PAGE_UP
												&& kE.getID() == KeyEvent.KEY_PRESSED) {
											window.previousPageAction();
											// System.out.println("page down:"
											// + kE.getID());

										}/* Ctrl +K */else if (kE.getKeyCode() == KeyEvent.VK_K
												&& kE.isControlDown()
												&& kE.getID() == KeyEvent.KEY_PRESSED) {
											System.out.println("Ctrl +K");
											window.getSearchTF().requestFocus();
										}
										/* home */else if (kE.getKeyCode() == KeyEvent.VK_HOME
												&& kE.getID() == KeyEvent.KEY_PRESSED) {
											System.out.println("home");
											window.firstPageAction();
										}
										/* end */else if (kE.getKeyCode() == KeyEvent.VK_END
												&& kE.getID() == KeyEvent.KEY_PRESSED) {
											System.out.println("end");
											window.lastPageAction();
										}
									}
								}
							}, java.awt.AWTEvent.KEY_EVENT_MASK);

 

其间遇到一个棘手的问题,就是我按【Page Down】时,触发了两次,如果当前页数为1,按一次【Page Down】,当前页数就变成了3,因为触发了两次。

为什么会这样呢?

因为键盘按下的时候触发了两种事件:KEY_PRESSED KEY_RELEASED

解决方法:

在if条件中增加:kE.getID() == KeyEvent.KEY_PRESSED



 这样保证按一次键盘,只触发一次事件

  • 大小: 25.5 KB
  • 大小: 110.1 KB
1
1
分享到:
评论

相关推荐

    java 实现仿qq截图效果的工具jar,并支持全局热键

    使用`Key Bindings`,可以在Swing应用中绑定特定的键盘快捷键到特定的Action。 5. **库的封装与发布为JAR**: 为了方便其他开发者使用这个工具,所有相关的Java类和JNI代码会被打包成一个可执行的JAR文件。这需要...

    jintellitype-1.3.1(java注册快捷键使用)

    Java作为一种跨平台的编程语言,虽然原生支持键盘事件处理,但若要实现全局快捷键监听,就需要借助第三方库,如JIntelliType。本文将详细讲解如何利用JIntelliType 1.3.1版本在Java中注册并使用快捷键。 首先,...

    java 监听windows系统热键组合

    在Java编程环境中,有时我们需要实现一个功能,即监听Windows系统的热键组合,以便在用户按下特定的键盘快捷键时执行相应的操作。这个功能在开发桌面应用程序时非常有用,特别是使用Swing作为UI框架的时候。标题提到...

    java实现的屏幕截取软件

    本文将深入探讨一个使用Java编程语言实现的屏幕截取软件,该软件模仿了QQ的截图功能,包括全局快捷键以及自定义截图区域的特性。 首先,Java作为一种跨平台的编程语言,具有丰富的库和API,使其成为开发此类应用的...

    Java文本编辑器(记事本)完整代码

    这款Java记事本代码提供了全面的功能,包括文本的读写、查找与替换、以及快捷键支持等,让用户能够方便地进行文本操作。下面将详细介绍这些关键功能的实现原理。 1. **文本读写**: 在Java中,我们可以使用`java....

    自己临时导东西用的仓库

    在Java中,我们可以利用Java的AWT(Abstract Window Toolkit)或Swing库来创建图形用户界面(GUI),并注册系统级快捷键。这些快捷键可以让用户通过键盘组合来触发特定的功能,提高软件的交互性和效率。例如,开发者...

    java编辑器源码(源代码)的设计与实现

    首先,Java编辑器的核心是Java Swing或JavaFX库,它们提供了图形用户界面(GUI)组件来构建编辑器的界面。Swing是Java AWT的扩展,而JavaFX则是一个现代的、更强大的UI工具包,它们都可以用来创建复杂的窗口应用。在...

    JAVA记事本+源代码

    1. **Swing或JavaFX**: Java提供两种主要的GUI库,Swing和JavaFX,用于创建桌面应用程序。Swing是较旧但广泛使用的库,而JavaFX提供了更现代的外观和更丰富的功能。考虑到这个项目名为“JAVA记事本”,它很可能使用...

    java编写的计算器

    ### Java编写的计算器:Swing组件与功能实现 #### 核心知识点概览: 1. **Swing组件库**:Swing是Java中用于构建GUI应用程序的轻量级组件工具包,提供了丰富的用户界面组件,如`JFrame`、`JButton`、`JTextField`...

    Java开发的进阶版迷宫游戏,只显示主角周围一个圆区域,出口在最右下角

    此外,Java的图形用户界面(GUI)库,如JavaFX或Swing,被用来创建游戏界面,接收键盘输入并更新显示区域。 关于视野限制,游戏可能采用了伪3D的视觉效果,通过模拟视线投射到2D平面,只显示主角视线范围内的方块。...

    java 应用程序绑定系统热键

    如果你需要跨平台的解决方案,可能需要寻找其他替代库,或者使用Java的AWT或Swing库中的`Key Bindings`机制,但这通常会限制在应用窗口内而不是全局系统热键。 总的来说,JIntellitype是一个强大的工具,能够帮助...

    java记事本

    1. **Java GUI编程**: Java记事本的实现离不开Java的Swing库,这是一个用于创建桌面应用的组件集合。通过使用JFrame、JButton、JTextArea、JMenuBar等类,开发者可以构建出具有菜单栏、按钮和文本编辑区域的用户界面...

    基于java的写的图片幻灯片切换特效.zip

    4. **事件处理**:为了增加交互性,可能还会包含手动切换的按钮或者键盘快捷键。`ActionListener`接口用于监听按钮点击事件,而`KeyAdapter`则可以监听键盘输入。 5. **文件操作**:如果幻灯片的图片来自于文件系统...

    java程序源代码,图书室借阅管理系统的程序

    - `JFrame`: 是Java Swing库中的一个类,用于创建窗口。在这个程序中,`frame`变量是用来创建主应用程序窗口的。 - `JPanel`: 用作容器,可以添加其他组件,如按钮、文本框等。`middlePanel`和`aa`是两个面板,...

    多页文本编辑器 界面美观 功能强大

    “Swing”这个标签表明,该文本编辑器是使用Java Swing库来构建的。Swing是Java平台上用于创建桌面应用的一个组件库,提供了丰富的用户界面元素和强大的功能。利用Swing,开发者可以创建出跨平台的应用程序,具有...

    Build_Your_Space_MacOS:这是在JAVA中为MacOS开发的应用程序

    对于MacOS,可能还需要使用Java的`com.apple.eawt`包来实现与操作系统的更深度集成,比如定制菜单栏或支持全局快捷键。 7. **测试和调试**: 使用IntelliJ IDEA、Eclipse等IDE进行开发时,可以方便地在MacOS上运行和...

    java照片查看器源代码.docx

    【PicsViewer】类是Java实现的一个简单的照片查看器程序,它使用了Swing库来构建用户界面。程序的核心功能包括浏览图片、切换图片、全屏显示以及支持键盘快捷键操作。以下是关于这个代码的详细解释: 1. **类结构**...

    eclipse的常用快捷鍵

    ### Eclipse的常用快捷键及其配置方法 #### 一、模板(Template)快捷键 - **快捷键**: Alt + / - **配置路径**: 窗口 -> 喜好设定 -> 工作台 -> 按键 -> 编辑 -> 内容辅助 - **个人习惯**: Shift+SPACE - **功能...

    2021-2022计算机二级等级考试试题及答案No.12687.docx

    20. Swing组件:JPanel、JTable和JFrame是Swing组件,而Menu属于AWT组件,不在Swing中。 21. 二叉树节点总数:根据二叉树的性质,总结点数等于叶子节点数+度为1的节点数+1,所以总结点数为70+80+1=151。 22. ...

    2021-2022计算机二级等级考试试题及答案No.5554.docx

    6. **Swing构件**:Swing是Java GUI的一部分,`JPanel`, `JTable`, 和 `JFrame`都是Swing中的构件,而`Menu`是AWT(Abstract Window Toolkit)中的构件,不是Swing的。 7. **Internet起源**:Internet(因特网)...

Global site tag (gtag.js) - Google Analytics