如果您使用java KeyListener類,那麼您知道如果按住一個鍵keyPressed將觸發一個KeyEvent,然後大約半秒鐘後將非常快速地觸發相同的鍵多次。我想知道是否有辦法避免KeyEvent發射太快。我希望他們能以每500毫秒一次的不錯的恆定速率。Java KeyListener keyPressed方法觸發得太快
2
A
回答
1
通常,按鍵的自動重複率由系統設置;我不知道它是否可以從Java內部更改。但是,您可以使用事件到達時間,直到您最後一次反應後500毫秒內(或者在密鑰釋放之後,應該爲鍵入快速的用戶清除計時器)之後的500毫秒內不對其作出響應。
5
可以,但關鍵是要不會減慢事件的觸發,但是放緩的速度有多快,你處理它們:
KeyListener kl = new KeyListener() {
private long lastPressProcessed = 0;
@Override
public void keyPressed(KeyEvent e) {
if(System.currentTimeMillis() - lastPressProcessed > 500) {
//Do your work here...
lastPressProcessed = System.currentTimeMillis();
}
}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) { }
};
4
不,這完全取決於系統。您必須聽取keyPressed
事件,自行啓動一個定時器,以固定速率觸發事件,並在下一個keyReleased
事件中停止。
嘗試這樣:
component.addKeyListener(new KeyListener() {
Timer t = new Timer();
TimerTask tt;
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
tt.cancel();
tt = null;
}
@Override
public void keyPressed(KeyEvent e) {
if (tt != null)
return;
tt = new TimerTask() {
@Override
public void run() {
System.out.println(System.currentTimeMillis() % 1000);
}
};
t.scheduleAtFixedRate(tt, 0, 500);
}
});
1
這是由你的操作系統控制。但你可以很容易地讓你的處理程序檢查自上次被觸發和響應以來的時間。
+0
查看Kurt Kaylor針對編碼解決方案的答案。 – 2011-03-04 21:47:53
相關問題
- 1. setTimeout觸發得太快
- 2. jQuery AJAX觸發得太快
- 3. KeyListener沒有達到keyPressed方法
- 4. KeyListener和keyPressed
- 5. AlarmManager觸發方式太快
- 6. keyPressed方法不工作Java
- 7. Process.WaitForExit()觸發太快
- 8. UINavigationController過渡動畫觸發得太快
- 9. java eclipse windowbuilder keyPressed事件不會觸發
- 10. 在mac上,在Java中,keyPressed事件不會觸發某些鍵
- 11. KeyListener - 爲什麼keyPressed方法延遲一種類型?
- 12. backgroundWorker.ProgressChanged事件觸發太快
- 13. AlarmManager觸發PendingIntent太快
- 14. KeyListener不會觸發
- 15. Java KeyListener未在JSpinner上觸發
- 16. Java - KeyListener事件沒有觸發
- 17. InputStream.read方法調用得太快
- 18. $('img')。load()發射得太快
- 19. Java JTextArea KeyListener
- 20. java - Can Keybinders實現keyPressed和keyReleased方法?
- 21. 的KeyListener不觸發動作
- 22. KeyListener在JApplet中未觸發
- 23. 如果SelectionChanged事件觸發得太快,WPF Treeview的stackoverflow?
- 24. Java - 太快無法識別?
- 25. SignalR完成事件觸發太快
- 26. java中的KeyPressed事件
- 27. java keylistener not called
- 28. Java KeyListener口吃
- 29. Java - KeyListener問題
- 30. java keyPressed事件在按下按鍵時保持觸發
這隻有在系統密鑰重複非常快時纔會有效。如果按下時間爲400毫秒,則可能會導致延遲達900毫秒。 – aioobe 2011-03-04 21:48:03
@aioobe - 除了改變系統自動重複速率之外,我認爲沒有辦法。這是一個欠採樣的屬性;會出現鋸齒現象,這會顯示爲緊張的重複時間。如果您正在處理長時間的自動重複事件,那麼可以應用反鋸齒技術來減少抖動,但是我懷疑長時間的自動重複事件是常見的應用。 – 2011-03-06 00:19:17