2015-12-07 44 views
2

當使用keyListeners時,如何使它的計數值僅在用戶按下左鍵時增加1,而不是基於多長時間增加拿住?Java KeyListener.keyPressed多次按住按鍵

public void keyPressed (KeyEvent e){ 
     int keyCode = e.getKeyCode(); 
     if (keyCode == KeyEvent.VK_LEFT){ 
      keyLabel.setText("left"); 
      count++;} 
+0

在該類的字段中創建一個布爾值。當'keyPressed'被調用時,你應該檢查這個布爾值的值。如果它已經是'真的',什麼都不要做。如果它是'false',則將其設置爲'true'然後遞增。在'keyReleaseded'中,將布爾值設置爲'false' –

+0

我添加了代碼,但是如果我按兩次左鍵,每次按下按鈕時是否可以增加1? – happyfacelegion

回答

1

考慮一個KeyListener,將計算的VK_LEFT每按一次的這個例子 - 即使鍵被按下和射擊多次。

label.addKeyListener(new KeyAdapter() { 

     boolean pressed = false; 
     @Override 
     public void keyPressed (KeyEvent e){ 
      int keyCode = e.getKeyCode(); 
      if (keyCode == KeyEvent.VK_LEFT && !pressed){ 
       pressed = true; 
       keyLabel.setText("left"); 
       System.out.println("Pressed: " + (++count)); 
      } 
     } 
     @Override 
     public void keyReleased (KeyEvent e){ 
      int keyCode = e.getKeyCode(); 
      if (keyCode == KeyEvent.VK_LEFT){ 
       pressed = false; 
       System.out.println("Released."); 
      } 
     }     
    }); 

雖然看起來的keyPressed鍵的同時按下反覆調用,一旦密鑰被釋放的keyReleased僅觸發,所以我們那個時候觸發一個布爾開關pressed