【问题标题】:Java Swing: KeyBinding for KEY_TYPED eventJava Swing:KEY_TYPED 事件的键绑定
【发布时间】: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

标签: java swing character


【解决方案1】:

除了为每个字符添加一个键并使用单独的Action事件记录它们之外,还有其他方法可以获取调用KeyListener的keyTyped()方法的字符吗?

我不相信有一个全局KeyStroke 可以传递给 InputMap,它的工作方式类似于 KeyListener,因为 KeyBindings 在单个键的基础上工作。但是,您可以通过循环遍历您希望处理的 char 值来创建单个 Action 并将键绑定到它 - 在 ActionListener 实现中,您可以通过 getActionCommand 获取键的值。比如处理a-z:

AbstractAction action = new AbstractAction(){

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println(e.getActionCommand());
    }

};
//loop over the ascii char values
for ( char a = 'A'; a <= 'Z'; a++ ){
     panel.getInputMap().put(KeyStroke.getKeyStroke(Character.toString(a)), "recordTypedKey");
}
panel.getActionMap().put("recordTypedKey", action);

如果需要,您可以添加修饰符...例如处理 shift 键(例如大写),

panel.getInputMap().put(KeyStroke.getKeyStroke("shift " + Character.toString(a)), "recordTypedKey");

【讨论】:

    猜你喜欢
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    相关资源
    最近更新 更多