2012-09-02 3 views
4

여러 개의 키 누름을 잡으려면 발송자 클래스를 어떻게 수정해야합니까? 지금은 단지 그들을 인쇄 할 들어 ...발송자로 여러 키 누름

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

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

} 

return false; 
} 
} 
+3

이 무엇을 달성하고자 않습니다 – kleopatra

+0

사용자 유형 N + J 인쇄를 원할 경우 NJ – user1610362

답변

4

나는 내 문제를 해결?
+0

"N을 누르십시오", "J를 누르십시오", "J를 놓으십시오", "K를 누르십시오", "릴리스 K", "릴리스 N"순으로이 작업이 실패합니다 접근. 'KEY_RELEASED'에있는리스트를 지우지 말고, 그 응답에서 표시된 @trashgod처럼 그 키를리스트에서 제거해야합니다. 그리고 당신이 사용하고있는 ArrayList를 인쇄하는보다 효율적인 방법이 있습니다. – Robin

3

은 사용자 유형 N+J 경우에, 나는 NJ를 인쇄 할.

NJ가 동시에 다른 이후에 도착 한 KeyEvent가 발생합니다 눌러 시도. 한 가지 방법은 one과 비슷한 enum Key을 만드는 것입니다. EnumSet을 사용하여 Set current을 만듭니다. KEY_PRESSED 이벤트가 도착하면 current을 업데이트하여 현재 누른 키와 새 키를 포함하십시오. KEY_RELEASED 이벤트가 도착하면 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; 
} 

}