2013-05-18 29 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或我的電腦,使它只註冊一個按鍵而不是兩個?在java keyhandler中降低鍵盤靈敏度?

編輯:這是我的臨時解決方案

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事件。但更好的解決方案是使用'鍵綁定'。搜索論壇獲取更多信息。這個建議是每天進行的。 – camickr

+0

鍵綁定不能正常工作,我的程序 –

+0

@camickr,沒有注意到它是關於箭頭。感謝您指出了這一點。 – svz