我应该如何修改调度程序类以捕获多个按键?现在我只想打印它们......
class MyDispatcher implements KeyEventDispatcher {
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID() == KeyEvent.KEY_PRESSED) {
System.out.println(e.getKeyChar());
}
return false;
}
}
我解决了我的问题:
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;
}
}
如果用户键入
N+J
,我要打印NJ
。
尝试同时按下N
和J
将导致一个KeyEvent
接一个到达。一种方法是创建一个enum Key
与此类似的. 使用EnumSet
,创建一个Set current
. 随着KEY_PRESSED
事件的到来,更新current
以包括当前按下的键和新的键;随着KEY_RELEASED
事件的到来,更新current
以排除新的事件。该方法current.equals()
将允许与游戏中使用的预定义键状态进行比较。请注意,EnumSet
对于合理数量的键,实例是不可变的,但实际上很小。