2013-05-18 28 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