2012-01-29 20 views
1

我正在创建一个使用keylistener的Java应用程序。我注意到当用户按住键时使用按键监听器时,它会注册,然后再花一秒时间来检测该按键。有没有办法摆脱这个短暂的延迟?java keypress操作中的修复延迟问题

public void keyPressed(KeyEvent arg0) 
{ 
    char key = arg0.getKeyChar(); 
    if(key == 'a') 
     update = Status.Left; 
    else if(key == 's') 
     update = Status.Crouch; 
    else if(key == 'd') 
     update = Status.Right; 
    else if(key == ' ') 
     update = Status.Shoot; 
    else 
     update = Status.None; 
    System.out.println(arg0.getKeyChar()); 
    this.repaint(); 
} 
+0

只需双重检查 - 这是AWT应用程序而不是Swing应用程序,对吗?因为如果使用Swing,我会有一个解决方案 - 使用Swing Timer和键绑定。 – 2012-01-29 05:22:06

+0

我正在使用swing – 2012-01-29 06:46:18

+0

@DazSlayer:KeyEvent适用于awt而不是Swing。 Swing有[KeyBinding](http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)。也请阅读一些关于他们的内容。他们比KeyEvent更合适。问候 – 2012-01-29 08:11:47

回答

1

我建议你不要使用keyPressed事件检测保持状态。使用计时器不断检查按下的按键。使用BitSet。在keyPressed和keyReleased上更新BitSet以跟踪按下的按键。这样您就可以一次检测到多个按键。 如果你正在构建一款游戏,你已经有了可用于此的游戏时钟

1

我认为这些事件是由JVM /操作系统生成的。用户必须更改键延迟/键重复设置以消除延迟。

我不认为有办法通过代码来控制延迟。