4

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

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

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

} 

return false;
}
}
4

2 回答 2

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;
}

}
于 2012-09-02T15:18:05.067 回答
3

如果用户键入N+J,我要打印NJ

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

于 2012-09-02T14:33:30.330 回答