如果您使用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. KeyListener没有达到keyPressed方法
- 2. jQuery AJAX触发得太快
- 3. AlarmManager触发方式太快
- 4. 在mac上,在Java中,keyPressed事件不会触发某些键
- 5. Java KeyListener未在JSpinner上触发
- 6. Java - KeyListener事件没有触发
- 7. InputStream.read方法调用得太快
- 8. $('img')。load()发射得太快
- 9. java - Can Keybinders实现keyPressed和keyReleased方法?
- 10. 如果SelectionChanged事件触发得太快,WPF Treeview的stackoverflow?
- 11. java keylistener not called
- 12. Java KeyListener口吃
- 13. Java - KeyListener问题
- 14. java keyPressed事件在按下按键时保持触发
- 15. 的Java的KeyListener
- 16. 的Java SyntheticEvent上的KeyListener
- 17. jQuery中的setInterval发生得太快
- 18. 在画布上的KeyListener:keyReleased触发,但没有keyPressed或keyTyped
- 19. Java KeyListener在单独的类
- 20. 蛇游戏。处理keyPressed方法
- 21. KeyListener在Java中不工作
- 22. KeyListener事件显然没有在Java小程序中触发
- 23. Java时钟太快
- 24. Java图形2D和KeyListener
- 25. Java Jbutton KeyListener
- 26. supervisord:php5-fpm退出得太快
- 27. 钛HTTPClient工作得太快
- 28. sys.exit()终止得太快?
- 29. 块ui变得太快
- 30. el.scrollIntoViewIfNeeded()滚动得太快
这只有在系统密钥重复非常快时才会有效。如果按下时间为400毫秒,则可能会导致延迟达900毫秒。 – aioobe 2011-03-04 21:48:03
@aioobe - 除了改变系统自动重复速率之外,我认为没有办法。这是一个欠采样的属性;会出现锯齿现象,这会显示为紧张的重复时间。如果您正在处理长时间的自动重复事件,那么可以应用反锯齿技术来减少抖动,但是我怀疑长时间的自动重复事件是常见的应用。 – 2011-03-06 00:19:17