Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing:键类型事件的键绑定_Java_Swing_Character - Fatal编程技术网

Java Swing:键类型事件的键绑定

Java Swing:键类型事件的键绑定,java,swing,character,Java,Swing,Character,我一直试图通过重写我以前用KeyListener解决的书中的问题来学习键绑定。我正在努力解决的问题是使用keybinds需要我记录已键入的消息并将其显示在面板上 使用KeyListener解决这个问题的方法很简单,就是使用keyTyped()方法用Unicode码记录字符,然后用按键读取修饰符/非Unicode键。如果KeyEvent.VK_ENTER与KeyEvent中的keycode匹配,则它会在面板上显示该字符串 ~~~~~~~~ 我认为它可以用键绑定的类似方法解决。它在KeyEvent文

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

使用KeyListener解决这个问题的方法很简单,就是使用keyTyped()方法用Unicode码记录字符,然后用按键读取修饰符/非Unicode键。如果KeyEvent.VK_ENTER与KeyEvent中的keycode匹配,则它会在面板上显示该字符串

~~~~~~~~

我认为它可以用键绑定的类似方法解决。它在KeyEvent文档中指出,每次输入字符时都会触发键入的KeyEvent.KEY_。我假设它意味着键入每个具有相应Unicode的字符,就像它在KeyListener中的工作方式一样

后来,我意识到我不知道如何检索角色,因为Oracle关于KeyBinds的教程说调用actionPerformed()时会使用KeyEvent

这是我认为可以使用KeyBinding将键入的键记录到StringBuilder的代码:

getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.KEY_TYPED, 0), "recordTypedKey");
getActionMap().put("recordTypedKey", addCharToString);
除了为每个字符添加一个键并使用单独的操作事件记录它们之外,还有没有其他方法可以获取调用KeyListener的keyTyped()方法的字符

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

我不相信有一个全局的
击键
可以传递到InputMap,它的工作方式与KeyListener类似,因为键绑定是基于单个键的。但是,您可以创建单个操作,并通过在希望处理的char值上循环来将键绑定到该操作-在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);
除了为每个字符添加一个键并使用单独的操作事件记录它们之外,还有没有其他方法可以获取调用KeyListener的keyTyped()方法的字符

我不相信有一个全局的
击键
可以传递到InputMap,它的工作方式与KeyListener类似,因为键绑定是基于单个键的。但是,您可以创建单个操作,并通过在希望处理的char值上循环来将键绑定到该操作-在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);

键绑定用于将特定的击键映射到操作。我不会使用键绑定来监听所有可能的击键<代码>我正在努力解决的问题是使用键绑定需要我记录已键入的消息-也许您应该使用
DocumentListener
。此侦听器可以添加到任何文本组件的
文档中。键绑定用于将特定的击键映射到操作。我不会使用键绑定来监听所有可能的击键<代码>我正在努力解决的问题是使用键绑定需要我记录已键入的消息
-也许您应该使用
DocumentListener
。此侦听器可以添加到任何文本组件的
文档中。