Java Keyevent обработка - PullRequest
       20

Java Keyevent обработка

2 голосов
/ 22 января 2012

Я создаю игру в Java-апплетах.Игра реагирует на события нажатия клавиш, внедряя интерфейс keylistener в моем классе.Я хочу, чтобы до тех пор, пока предыдущее событие не будет завершено, никакие новые события не могут быть вызваны с клавиатуры.Как это возможно?Спасибо

Ответы [ 2 ]

5 голосов
/ 22 января 2012

Да, это возможно.Вы можете либо удалить прослушиватель и повторно добавить его, либо иметь поле логического класса, управляющее поведением кода KeyListener.Кстати, если это проект Swing и вы создаете JApplet, вам следует использовать привязки клавиш, а не KeyListeners.В руководстве Key Bindings вы узнаете, почему.

0 голосов
/ 22 января 2012

события с клавиатуры будут происходить независимо от вашего кода в слушателях, пользователь нажимает клавишу, и событие запускается ОС, а затем дело доходит до Java. Теперь вам решать, хотите ли вы слушать это событие или нет. Обработка событий в Java выполняется слушателями. Когда вы вызываете addXXXListener, - слушатель «зарегистрировался» в Java, и он будет уведомлен о событиях, вы вызываете removeXXXListener - и слушатель будет «отменен». Вот как это работает. В коде слушателя вы решаете, что делать с событиями, полученными из Java.

Сказав это, ответ на ваш вопрос в целом таков: вы можете игнорировать события в вашем слушателе, когда вам нужно (когда вы получили «предыдущее нажатие клавиши»). Другой подход - вызывать removeListener / addListener, когда это необходимо.

Еще одна вещь, Swing является однопоточной, поэтому невозможно, чтобы два события происходили «одновременно», поэтому «следующее ключевое событие» будет запущено только после «предыдущее событие complete "... Конечно, вы можете написать свой код внутри слушателя, чтобы он сам порождал потоки, но это совсем другая история.

Надеюсь, это поможет

...