首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java : KeyBinding for KEY_TYPED事件

Java : KeyBinding for KEY_TYPED事件
EN

Stack Overflow用户
提问于 2016-08-01 19:46:37
回答 1查看 334关注 0票数 0

我一直试图通过重写我以前用KeyListener解决过的问题来学习键绑定。使用keybinds解决的问题要求我记录已键入的消息并将其显示在面板上。

使用KeyListener解决该问题的方法是使用keyTyped()方法记录单曲字符,并使用keyPressed读取修饰符/非Unicode键。如果KeyEvent.VK_ENTER与密钥事件中的密钥代码匹配,那么它将在面板上显示字符串。

代码语言:javascript
复制

我认为可以用KeyBinds以类似的方式解决这个问题。它说,在KeyEvent文档中,每次输入字符时都会触发KeyEvent.KEY_TYPED。我认为这意味着每个字符都要输入相应的Unicode,就像它在KeyListener中的工作方式一样。

后来,我意识到我不知道如何检索字符,因为关于KeyBinds的Oracle教程说,KeyEvent是在调用actionPerformed()时消耗的。

这是我认为可以让我使用StringBuilder记录输入键的代码:

代码语言:javascript
复制
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.KEY_TYPED, 0), "recordTypedKey");
getActionMap().put("recordTypedKey", addCharToString);

除了向每个字符添加一个键并使用单独的Action来记录这些字符之外,有没有一种方法可以获得调用KeyListener的keyTyped()方法的字符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-01 20:15:01

除了向每个字符添加一个键并使用单独的Action来记录这些字符之外,有没有一种方法可以获得调用KeyListener的keyTyped()方法的字符?

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

代码语言:javascript
复制
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);

如果needed...for示例处理shift键(如大写),则可以添加修饰符。

代码语言:javascript
复制
panel.getInputMap().put(KeyStroke.getKeyStroke("shift " + Character.toString(a)), "recordTypedKey");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38706950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档