Java 使用dispatcher多次按键

Java 使用dispatcher多次按键,java,swing,awt,keyevent,Java,Swing,Awt,Keyevent,我应该如何修改dispatcher类以捕获多个按键? 现在我只想把它们打印出来 class MyDispatcher implements KeyEventDispatcher { public boolean dispatchKeyEvent(KeyEvent e) { if (e.getID() == KeyEvent.KEY_PRESSED) { System.out.println(e.getKeyChar()); } return false; } } 如果用户键入N+

我应该如何修改dispatcher类以捕获多个按键? 现在我只想把它们打印出来

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

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

} 

return false;
}
}
如果用户键入
N+J
,我想打印
NJ


同时按下
N
J
将导致一个
KeyEvent
相继到达。一种方法是创建与此类似的
enum键
。使用
EnumSet
,创建一个
Set current
。当按下
键时
事件到达,更新
当前
以包括当前按下的键和新键;当
KEY\u发布时
事件到达,更新
current
以排除新事件。方法
current.equals()
将允许与游戏中使用的预定义关键状态进行比较。请注意,
EnumSet
实例是不可变的,但对于合理数量的键来说,实例非常小。

我解决了以下问题:

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

}
类MyDispatcher实现KeyEventDispatcher{ ArrayListtypedKeys=新的ArrayList(); 公共布尔dispatchKeyEvent(KeyEvent e){ 如果(e.getID()==KeyEvent.KEY_按下) typedKeys.add(“+e.getKeyChar()); 如果(e.getID()==KeyEvent.KEY_已释放){ 字符串str=typedKeys+“”; System.out.println(str.substring(1,str.length()-1).replaceAll(“,”,”); typedKeys.clear(); } 返回false; } }
如果用户键入N+J,我想打印NJ。请注意,“按N”、“按J”、“释放J”、“按K”、“释放K”、“释放N”的顺序将因这种方法而失败。您不应清除已发布的
键上的列表,而应仅从列表中删除该键,如@trashgood在其回答中所示。还有比您正在使用的更有效的方法来打印
ArrayList