Java 使用dispatcher多次按键
我应该如何修改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+
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
。