【发布时间】:2016-12-07 00:17:33
【问题描述】:
我一直在尝试通过重写我之前使用 KeyListener 解决的书中的问题来学习键绑定。我正在努力使用键绑定解决的问题要求我记录输入的消息并将其显示在面板上。
使用 KeyListener 解决问题的方法是使用 keyTyped() 方法记录带有 unicode 的字符,并使用 keyPressed 读取修饰符/非 Unicode 键。如果 KeyEvent.VK_ENTER 匹配来自 keyevent 的键码,则它会在面板上显示字符串。
~~~~~~~~
我认为可以使用 KeyBinds 以类似的方式解决它。它在 KeyEvent 文档中说每次输入字符时都会触发 KeyEvent.KEY_TYPED 。我假设这意味着每个具有相应 Unicode 的字符都被键入,就像它在 KeyListener 中的工作方式一样。
后来,我意识到我不知道如何检索字符,因为关于 KeyBinds 的 Oracle 教程说调用 actionPerformed() 时会消耗 KeyEvent。
这是我认为可以让我使用 KeyBindings 将键入的键记录到 StringBuilder 的代码:
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.KEY_TYPED, 0), "recordTypedKey");
getActionMap().put("recordTypedKey", addCharToString);
除了为每个字符添加一个键并使用单独的 Action 事件记录它们之外,还有其他方法可以获取调用 KeyListener 的 keyTyped() 方法的字符吗?
【问题讨论】:
-
键绑定用于将特定的 KeyStroke 映射到 Action。我不会使用键绑定来监听所有可能的 KeyStroke。
The problem that I'm struggling to solve using keybinds requires me to record a message that's been typed- 也许你应该使用DocumentListener。这个监听器可以添加到任何文本组件的Document。