使用调度程序进行多次按键操作

时间:2012-09-02 13:51:51

标签: java swing awt keyevent

如何修改我的调度程序类以捕获多个按键? 现在我只想打印它们......

class MyDispatcher implements KeyEventDispatcher {
public boolean dispatchKeyEvent(KeyEvent e) {

if (e.getID() == KeyEvent.KEY_PRESSED) {
   System.out.println(e.getKeyChar());

} 

return false;
}
}

2 个答案:

答案 0 :(得分:4)

我解决了我的问题:

class MyDispatcher implements KeyEventDispatcher {
ArrayList<String>typedKeys = new ArrayList<String>();
public boolean dispatchKeyEvent(KeyEvent e) {

if (e.getID() == KeyEvent.KEY_PRESSED) 
    typedKeys.add(""+e.getKeyChar());

if (e.getID() == KeyEvent.KEY_RELEASED) {
    String str = typedKeys+"";
    System.out.println(str.substring(1,str.length()-1).replaceAll(", ",""));
    typedKeys.clear();
 } 

return false;
}

}

答案 1 :(得分:3)

  

如果用户输入N+J,我想打印NJ

尝试同时按NJ会导致一个KeyEvent到达另一个enum Key。一种方法是创建与此one类似的EnumSet。使用Set current创建KEY_PRESSED。当current个事件到达时,请更新KEY_RELEASED以包含当前按下的键加上新的键;当current个事件到达时,请更新current.equals()以排除新的事件。方法EnumSet将允许与游戏中使用的预定义关键状态进行比较。请注意,{{1}}实例是不可变的,但对于合理数量的键,效率很小。