最近在改进密码管理系统,
突然想到可以为它增加全局快捷键,比如:
按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
这样保证按一次键盘,只触发一次事件
相关推荐
使用`Key Bindings`,可以在Swing应用中绑定特定的键盘快捷键到特定的Action。 5. **库的封装与发布为JAR**: 为了方便其他开发者使用这个工具,所有相关的Java类和JNI代码会被打包成一个可执行的JAR文件。这需要...
Java作为一种跨平台的编程语言,虽然原生支持键盘事件处理,但若要实现全局快捷键监听,就需要借助第三方库,如JIntelliType。本文将详细讲解如何利用JIntelliType 1.3.1版本在Java中注册并使用快捷键。 首先,...
在Java编程环境中,有时我们需要实现一个功能,即监听Windows系统的热键组合,以便在用户按下特定的键盘快捷键时执行相应的操作。这个功能在开发桌面应用程序时非常有用,特别是使用Swing作为UI框架的时候。标题提到...
本文将深入探讨一个使用Java编程语言实现的屏幕截取软件,该软件模仿了QQ的截图功能,包括全局快捷键以及自定义截图区域的特性。 首先,Java作为一种跨平台的编程语言,具有丰富的库和API,使其成为开发此类应用的...
这款Java记事本代码提供了全面的功能,包括文本的读写、查找与替换、以及快捷键支持等,让用户能够方便地进行文本操作。下面将详细介绍这些关键功能的实现原理。 1. **文本读写**: 在Java中,我们可以使用`java....
在Java中,我们可以利用Java的AWT(Abstract Window Toolkit)或Swing库来创建图形用户界面(GUI),并注册系统级快捷键。这些快捷键可以让用户通过键盘组合来触发特定的功能,提高软件的交互性和效率。例如,开发者...
首先,Java编辑器的核心是Java Swing或JavaFX库,它们提供了图形用户界面(GUI)组件来构建编辑器的界面。Swing是Java AWT的扩展,而JavaFX则是一个现代的、更强大的UI工具包,它们都可以用来创建复杂的窗口应用。在...
1. **Swing或JavaFX**: Java提供两种主要的GUI库,Swing和JavaFX,用于创建桌面应用程序。Swing是较旧但广泛使用的库,而JavaFX提供了更现代的外观和更丰富的功能。考虑到这个项目名为“JAVA记事本”,它很可能使用...
### Java编写的计算器:Swing组件与功能实现 #### 核心知识点概览: 1. **Swing组件库**:Swing是Java中用于构建GUI应用程序的轻量级组件工具包,提供了丰富的用户界面组件,如`JFrame`、`JButton`、`JTextField`...
此外,Java的图形用户界面(GUI)库,如JavaFX或Swing,被用来创建游戏界面,接收键盘输入并更新显示区域。 关于视野限制,游戏可能采用了伪3D的视觉效果,通过模拟视线投射到2D平面,只显示主角视线范围内的方块。...
如果你需要跨平台的解决方案,可能需要寻找其他替代库,或者使用Java的AWT或Swing库中的`Key Bindings`机制,但这通常会限制在应用窗口内而不是全局系统热键。 总的来说,JIntellitype是一个强大的工具,能够帮助...
1. **Java GUI编程**: Java记事本的实现离不开Java的Swing库,这是一个用于创建桌面应用的组件集合。通过使用JFrame、JButton、JTextArea、JMenuBar等类,开发者可以构建出具有菜单栏、按钮和文本编辑区域的用户界面...
4. **事件处理**:为了增加交互性,可能还会包含手动切换的按钮或者键盘快捷键。`ActionListener`接口用于监听按钮点击事件,而`KeyAdapter`则可以监听键盘输入。 5. **文件操作**:如果幻灯片的图片来自于文件系统...
- `JFrame`: 是Java Swing库中的一个类,用于创建窗口。在这个程序中,`frame`变量是用来创建主应用程序窗口的。 - `JPanel`: 用作容器,可以添加其他组件,如按钮、文本框等。`middlePanel`和`aa`是两个面板,...
“Swing”这个标签表明,该文本编辑器是使用Java Swing库来构建的。Swing是Java平台上用于创建桌面应用的一个组件库,提供了丰富的用户界面元素和强大的功能。利用Swing,开发者可以创建出跨平台的应用程序,具有...
对于MacOS,可能还需要使用Java的`com.apple.eawt`包来实现与操作系统的更深度集成,比如定制菜单栏或支持全局快捷键。 7. **测试和调试**: 使用IntelliJ IDEA、Eclipse等IDE进行开发时,可以方便地在MacOS上运行和...
【PicsViewer】类是Java实现的一个简单的照片查看器程序,它使用了Swing库来构建用户界面。程序的核心功能包括浏览图片、切换图片、全屏显示以及支持键盘快捷键操作。以下是关于这个代码的详细解释: 1. **类结构**...
### Eclipse的常用快捷键及其配置方法 #### 一、模板(Template)快捷键 - **快捷键**: Alt + / - **配置路径**: 窗口 -> 喜好设定 -> 工作台 -> 按键 -> 编辑 -> 内容辅助 - **个人习惯**: Shift+SPACE - **功能...
20. Swing组件:JPanel、JTable和JFrame是Swing组件,而Menu属于AWT组件,不在Swing中。 21. 二叉树节点总数:根据二叉树的性质,总结点数等于叶子节点数+度为1的节点数+1,所以总结点数为70+80+1=151。 22. ...
6. **Swing构件**:Swing是Java GUI的一部分,`JPanel`, `JTable`, 和 `JFrame`都是Swing中的构件,而`Menu`是AWT(Abstract Window Toolkit)中的构件,不是Swing的。 7. **Internet起源**:Internet(因特网)...