2012-05-15 26 views
0

我正在嘗試編寫一段代碼,以便當按下某個鍵時它將執行某些操作,但此鍵必須被釋放,然後再次按壓才能重新觸發事件。所以,如果用戶只是按住鍵,它就不會一遍又一遍地執行,而是必須反覆按下並釋放。
到目前爲止,我有:基本布爾狀態問題

if(keyLifted) 
{ 
    if(Keyboard.isKeyDown(45)) 
    { 
     keyLifted = false; 
     dostuff; 
    } 
    else if(Keyboard.isKeyDown(46)) 
    { 
     keyLifted = false; 
     dostuff(); 
    } 
    else 
    { 
     keyLifted = true; 
    } 
} 

但是這是有缺陷的原因是顯而易見的(只會復位鍵,如果鍵已經解除被未提升:如果按該鍵,它不會被設置成未按下)。我嘗試了幾個變化,但我不能讓它工作。

在此先感謝您的幫助!

+4

爲什麼不採取按鍵和keyrelease事件來處理鍵盤狀態變化? – keltar

+0

@ user1296964請不要*爲您正在使用的語言以外的語言添加標籤。標記垃圾郵件不低於郵件垃圾郵件:) –

+0

謝謝凱爾塔。看起來像一個愚蠢的oversite,但我很累,我可能只是看了一個小時的代碼,然後放棄,而不是看到:) – Htuy

回答

0

您應該使用KeyListener來捕獲鍵盤事件。在這裏你去:

public class KeyListenerExample extends JFrame { 
    public KeyListenerExample() { 
     addKeyListener(new KeyAdapter() { 
      private boolean keyLifted; 

      public void keyReleased(KeyEvent e) { 
       keyLifted = true; 
      } 

      public void keyPressed(KeyEvent e) { 
       keyLifted = false; 
       switch (e.getKeyChar()) { 
        case 45: 
         doStuff(); 
         break; 

        case 46: 
         doStuff(); 
         break; 
       } 
      } 
     }); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    private void doStuff() { 
     System.out.println("stuff"); 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     new KeyListenerExample(); 
    } 
} 

我只是不停的keyLifted,因爲它是在你的榜樣。但我認爲對於通常的鍵盤來說,你並不需要它。

+0

謝謝。這真的是我需要的。 – Htuy