让用户选择热键然后保存的最佳方法是什么?

时间:2014-12-21 22:03:16

标签: java swing hotkeys

我从KeyStroke(来自KeyEvent事件,keyPressed附加到KeyListener)获得JTextField个对象,我用它来创建本地和全球捷径。我将keyStroke.getkeyCode()keyStroke.getModifiers()保存到文件中,以便在重新启动应用程序时重新创建快捷方式。据我了解,这些值直接对应于基于KeyEvent常量的VK_类的等效方法。

KeyEvent类有以下警告:

  

警告:除了Java语言定义的那些键(VK_ENTER,VK_BACK_SPACE和VK_TAB)之外,不要依赖VK_常量的值。 Sun保留根据需要更改这些值的权利,以适应未来更广泛的键盘。

这是否意味着我不应该在会话之间存储keyCode,因为它可能会在未来的Java版本中发生变化?如果是这样,我应该存储什么?我正在考虑存储密钥的名称,因为它在VK_常量中使用,也用于KeyStroke.getKeyStroke()方法之一,但我不确定这是否更好,如何实际获得适当的字符串。

此外,我不太确定在捕获热键时如何最好地处理不同的键盘布局。似乎getKeyCode()有时会在不同的布局上产生未定义的代码。

2 个答案:

答案 0 :(得分:2)

值不太可能会改变,但是,有可能他们可能会改变。

最简单的解决方案是通过调用KeyStroke的toString()方法存储返回的字符串。保证该字符串可由KeyStroke.getKeyStroke(String)解析,这是您在阅读已保存的首选项时应该调用的内容。

我认为如果使用getExtendedKeyCode()而不是getKeyCode(),可以解决未定义键码的问题。

答案 1 :(得分:2)

虽然新密钥代码可能代表现有代码的超集,但用户可以随时更改或添加键盘。允许用户重新分配小说keyboard layout所需的密钥可以减轻这种风险。在这个完整的示例中,org.gcs.robot.RobotChase管理应用程序已知的所有击键的enum KeyRCKeys RCPrefs显示一个对话框,允许用户任意重新分配密钥。 java.util.prefs.Preferences包括在{{1}}的实例中保存和恢复所选密钥代码值的方法。