1

我想找出在 java 中按下某个键的时间(以毫秒为单位),但即使我按下该键的时间少于一秒或更长时间,我的结果总是会打印出不同的数字。例如,如果我按下不到一秒显示 30、45 或 98,如果我按下 3 秒显示 35、50、120 我试过这个代码

long keyPressedMillis;
long keyPressLength;

.

public void keyPressed(KeyEvent arg0) {
    // TODO Auto-generated method stub
    int codigo = arg0.getKeyCode();
    if(codigo == KeyEvent.VK_SPACE)
    {
           keyPressedMillis = System.currentTimeMillis();           
    }
}

.

public void keyReleased(KeyEvent arg0) {
    // TODO Auto-generated method stub
    int codigo = arg0.getKeyCode();
    if(codigo == KeyEvent.VK_SPACE)
    {
           keyPressLength = System.currentTimeMillis() -keyPressedMillis;           
           System.out.println(keyPressLength);          
    }
}
4

1 回答 1

3

keyPressed可以(并且将会)在按键被按下时重复调用。你应该输入标志,你可以检查这是否是一个重复的关键事件......

int lastKey = -1;

public void keyPressed(KeyEvent arg0) {
    // TODO Auto-generated method stub
    int codigo = arg0.getKeyCode();
    if (codigo != lastkey) {
        lastkey = codigo
        if(codigo == KeyEvent.VK_SPACE)
        {
           keyPressedMillis = System.currentTimeMillis();           
        }
    }
}

当然,在您的keyReleased事件处理程序中,您应该重置此值,这样您就不会错过新的按键;)

于 2014-06-26T05:13:46.247 回答