2014-04-27 26 views
1

好吧,我正在製作一個程序,它應該按下'f'鍵3秒後執行某些操作,如果它沒有按下3秒鐘,那麼它不應該做任何事情,我知道如何知道是否被按下和釋放的關鍵信息,但我沒有找到任何方法知道被壓的時間在java中按下多長時間

private void formKeyPressed(java.awt.event.KeyEvent evt) {         
    // to know if a key is being pressed 

} 
private void formKeyReleased(java.awt.event.KeyEvent evt) {         
    // to know when a key is released 

} 

編輯: Nevermid關於這些問題的答案,它沒沒有工作。使它工作我不得不這樣做:

private long keyPressedMillis; 
private boolean alreadyPassed==false; 
... 
private void formKeyPressed(KeyEvent event) { 
if(alreadyPassed==false) 
keyPressedMillis = System.currentTimeMillis() 
alreadyPassed=true; 
} 
private void forKeyReleased(KeyEvent event) { 
long keyPressLength = System.currentTimeMillis() - keyPressedMillis; 
    alreadyPassed=false; 
    System.out.println("Key Pressed "+keyPressLenght+" ms"); 

} 

回答

0
long whenTheKeyWasPressed; 

private void formKeyPressed(java.awt.event.KeyEvent evt) {         
    whenTheKeyWasPressed = System.currentTimeMillis(); 
} 

private void formKeyReleased(java.awt.event.KeyEvent evt) {         
    long now = System.currentTimeMillis(); 

    if ((now - whenTheKeyWasPressed) >= 3000L) { 
     ... 
    } 
} 

這隻會觸發動作的鍵被釋放時,雖然。如果要在時間達到3秒時觸發該操作,請在keyPressed()方法中啓動一個swing Timer,然後將其從keyReleased()方法中停止。

+0

好,謝謝,我會檢查類定時器 – HkGDota

+0

它沒有工作,我希望它按3秒鍵後,顯示像「SS」的信息,但它並沒有顯示任何東西 – HkGDota

+0

我們不是額外的luci巫師。因此我們無法解釋爲什麼你的代碼在沒有看到你的代碼的情況下無法工作編輯你的問題併發布你的代碼。 –

0

你只需要跟蹤鍵被按下的時間和計算釋放時間。

long keyPressedMillis; 

private void onKeyPressed(KeyEvent event) { 
    keyPressedMillis = System.currentTimeMillis() 
} 

private void onKeyReleased(KeyEvent event) { 
    long keyPressLength = System.currentTimeMillis() - keyPressedMillis; 
    if (keyPressLength >= 3000) { 
     //do whatever you need 
    } 
} 
+0

我不明白System.currentTimeMillis()做了什麼,你能解釋一下嗎? – HkGDota

+0

它沒有工作,我做了System.out.println(「SS」);然後按下一個鍵4秒鐘,但沒有打印任何東西 – HkGDota

相關問題