Ни , если действительно обнаружит, что одновременно нажаты клавиши со стрелками влево и вправо. Событие вернет только последним нажатой клавишей. Даже когда вы нажимаете стрелку ВВЕРХ, а затем клавиши со стрелками влево, все, что вы действительно обнаруживаете, - это стрелка влево. Вы вполне могли бы нажать клавиши со стрелками ВНИЗ и ВЛЕВО и то же самое, что и состояние IF.
Один из способов обнаружить ли не несколько клавиш нажаты одновременно является созданием логических флагов указать, какие нужные клавиши нажимаются и которые не являются, но вы также должны использовать KeyReleased события так, чтобы фальсифицировать необходимые флаги при отпускании определенного ключа. Булевы флаги должны быть глобальными для вашей клавиатуры событий, например:
boolean keyOne = false; // flag for LEFT Arrow key
boolean keyTwo = false; // flag for UP Arrow key
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_LEFT) { keyOne = true; }
else if(key == KeyEvent.VK_UP) { keyTwo = true; }
if (keyOne && !keyTwo) {
System.out.println("Only the LEFT Arrow key is pressed!");
}
else if (!keyOne && keyTwo) {
System.out.println("Only the UP Arrow key is pressed!");
}
else if (keyOne && keyTwo) {
System.out.println("Both LEFT Arrow and UP Arrow keys are pressed!);
}
}
public void keyReleaseded(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_LEFT) { keyOne = false; }
else if(key == KeyEvent.VK_UP) { keyTwo = false; }
}
По крайней мере, то, что эффект ...
Поместите нужный код в (keyOne & & keyTwo) если условие ,
Конечно, первое, если должно быть, если – chodi
Тогда вы должны отредактировать свой код, чтобы указать это. – DevilsHnd
Не используйте KeyListener. Вы должны использовать 'Key Bindings' для обработки определенных событий. Проверьте [Motion Using the Keyboard]() для получения дополнительной информации и рабочих примеров, которые работают одновременно с несколькими нажатиями клавиш. – camickr