2013-02-21 3 views
1

키를 누를 때 올바르게 알리는 방법을 파악하는 데 문제가 있습니다. keyPressed 메서드는 여러 키를 처리 할 때 첫 번째 키를 누를 때 다시 호출되는 것처럼 보이지 않습니다.Java 키 이벤트

예 : 오른쪽 화살표 키를 누른 채로 있으면 반복적으로 호출됩니다 (인쇄 테스트를 계속 함) 그러나 오른쪽 화살표 키를 누른 다음 스페이스 키를 한 번 누르고 스페이스 키를 놓으면 바로 화살표 키를 누른 채로 keyPressed() 메소드가 호출되지 않은 것처럼 보입니다. (아무것도 인쇄되지 않습니다). 키보드 포커스의 놀라운 세계에

public void keyPressed(KeyEvent e) { 

    System.out.println("test"); 

    switch (e.getKeyCode()) { 

     case KeyEvent.VK_LEFT: 
      guy.moveLeft(); 
      break; 

     case KeyEvent.VK_RIGHT: 
      guy.moveRight(); 
      break; 

     case KeyEvent.VK_SPACE: 
      guy.jump(); 
      break; 
    } 
} 

답변

3

에 오신 것을 환영합니다 :

이 내 코드처럼 보이는 것입니다.

가 포커스 가능하고 키보드 포커스가 있어야합니다 키 이벤트를 수신하는 모든 구성 요소의 순서를 ... 당신이 구성 요소에 KeyListener 부착 한 것을

가정. 이렇게하면 게임과 같은 용도로 사용할 때 매우 흐릿 해집니다.

대신 key bindings API을 사용해야합니다. 핵심 작업을 쉽게 코딩 할 수있게 해주는 것 외에도 개별 이벤트를 트리거해야하는 포커스 조건을 지정할 수 있습니다.

+0

감사합니다. 그런 다음 키 바인딩을 살펴 봅니다. – sache

+0

몇 가지 키 바인딩을 만들었지 만 이전과 똑같이 작동합니다. 여러 개의 키를 누르면 초점이 최근 키를 놓은 후에 계속 눌러져있는 이전 키로 돌아 가지 않습니다. – sache

+0

반복 키 이벤트를 청취하는 대신 키 해제를 위해 플래그를 넣거나 타이머와 모니터를 사용하거나 플래그를 재설정하거나 타이머를 중지하십시오. 'javax.siwng.Timer'와 같은 것을 사용하는 것이 좋습니다. – MadProgrammer