【发布时间】:2015-02-20 01:19:35
【问题描述】:
我从KeyEvent(来自keyPressed 事件,KeyListener 附加到JTextField)获得了一个KeyStroke 对象,用于创建本地和全局快捷方式。我将keyStroke.getkeyCode() 和keyStroke.getModifiers() 保存到一个文件中,以便在重新启动应用程序时重新创建快捷方式。据我了解,这些值直接对应于基于VK_ 常量的KeyEvent 类的等效方法。
KeyEvent 类有以下警告:
警告:除了那些由 Java 语言定义的键(VK_ENTER、VK_BACK_SPACE 和 VK_TAB)之外,不要依赖 VK_ 常量的值。 Sun 保留根据需要更改这些值的权利,以适应未来更广泛的键盘。
这是否意味着我不应该在会话之间存储keyCode,因为它可能会在未来的 Java 版本中发生变化?如果是这样,我应该存储什么?我正在考虑存储密钥的名称,因为它在 VK_ 常量中使用并且也用于 KeyStroke.getKeyStroke() 方法之一,但我不确定这是否会更好以及如何实际获得适当的字符串。
此外,我不太确定在捕获热键时如何最好地处理不同的键盘布局。似乎getKeyCode() 有时会在不同的布局上产生未定义的代码。
【问题讨论】: