[英]Java Swing: KeyBinding for KEY_TYPED event
我一直在尝试通过重写本书中以前使用KeyListener解决的问题来学习按键绑定。 我正在努力解决使用键绑定的问题,这要求我记录已键入的消息并将其显示在面板上。
使用KeyListener解决问题的方法很简单,就是使用keyTyped()方法以Unicode记录字符,并通过keyPressed读取修饰符/非Unicode键。 如果KeyEvent.VK_ENTER与键盘事件中的键盘代码匹配,则它将在面板上显示字符串。
~~~~~~~~~
我认为可以使用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()方法的字符?
除了向每个字符添加键并使用单独的Action事件记录它们之外,是否有其他方法可以获取将调用KeyListener的keyTyped()方法的字符?
我不认为可以传递给InputMap的全局KeyStroke
类似于KeyListener,因为KeyBindings是基于单个键工作的。 但是,您可以通过循环处理要处理的char值来创建单个Action并将键绑定到其上-在ActionListener实现中,您可以通过getActionCommand
获得键的值。 例如,处理az:
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");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.