хорошо, я делаю программу, и она должна что-то делать после нажатия клавиши "f" в течение 3 секунд, если она не была нажата в течение 3 секунд, тогда она ничего не должна делать, я знаю, как узнать, есть ли ключ нажатие и отключение, но я не нахожу никакого способа узнать время нажатия
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");
}
Вам просто нужно отслеживать, когда был нажат ключ, и рассчитать, как долго он будет выпущен.
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
}
}
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() и остановите его из метода keyReleased().