2015-12-07 43 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