2013-05-18 1 views
0
private class KeyHandler implements KeyEventDispatcher{ 

    @Override 
    public boolean dispatchKeyEvent(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_RIGHT){ 
      tetrominoList.get(currentPiece).moveRight(); 
    }else if(e.getKeyCode() == KeyEvent.VK_LEFT){ 
     tetrominoList.get(currentPiece).moveLeft(); 
    }else if (e.getKeyCode() == KeyEvent.VK_UP){ 
     System.out.print("k"); 
     tetrominoList.get(currentPiece).rotate(); 
    } 


     return false; 
    } 

이 코드는 위쪽 화살표를 한 번 누르면 "kk"를 반환합니다. 두 개가 아닌 하나의 키 히트를 등록하도록 Java 또는 내 컴퓨터를 구성하는 방법은 무엇입니까?자바 키 핸들러의 키보드 민감도가 낮습니까?

편집 : 이것은 내가 틀렸을 수도 내 임시 방편

private class KeyHandler implements KeyEventDispatcher{ 

    int counter = 0; 
    public boolean dispatchKeyEvent(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_RIGHT){ 
      tetrominoList.get(currentPiece).moveRight(); 
    }else if(e.getKeyCode() == KeyEvent.VK_LEFT){ 
     tetrominoList.get(currentPiece).moveLeft(); 
    }else if (e.getKeyCode() == KeyEvent.VK_UP){ 
     counter++; 
     if(counter == 2){ 
      System.out.print("k"); 
      tetrominoList.get(currentPiece).rotate(); 
      counter = 0; 
     } 
    } 
+0

귀하의 솔루션이 합리적인 것으로 보입니다. – Maroun

답변

1

하지만 코드가 모두 KEY_PRESSEDKEY_RELEASED 이벤트를 처리하는 것 같습니다. 아마도 KEY_TYPED 이벤트를 확인하고 편지를 인쇄하면됩니다. 그렇지 않으면 처음 두 이벤트 중 하나만 처리 할 수 ​​있습니다.

+0

+1하지만 keyTyped 이벤트는 위쪽/아래쪽/오른쪽/왼쪽 등 KeyEvents에 대해 생성되지 않습니다. 그냥 keyPressed 이벤트를 확인하십시오. 그러나 더 나은 해결책은'Key Bindings '를 이용하는 것이다. 자세한 정보는 포럼을 검색하십시오. 이 제안은 매일 제기됩니다. – camickr

+0

키 바인딩이 내 프로그램에 제대로 작동하지 않습니다. –

+0

@camickr, 그것이 화살표에 관한 것임을주의하지 않았습니다. 그 점을 지적 해 주셔서 감사합니다. – svz