Как перехватить KeyPressEvent в Java GWT? - PullRequest
1 голос
/ 23 февраля 2011

Я новичок в Java, и в нашем коде мы используем GWT.

Мы используем KeyPressEvent для обработки запроса Key_Enter.Но, похоже, для каждого входящего запроса два события запускаются с KeyPressEvent.Но я ожидаю, что должно быть запущено только одно событие, поскольку я вхожу только один раз.

Ниже приведен мой код.Пожалуйста, проверьте и дайте мне знать, все, что нам нужно исправить ..

void onEnter(KeyPressEvent event)
{
        if(event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER)
        {
           //(seems to times this code is called)
           //Domy stuff
        }
}

Если я использую event.getCharCode() вместо event.getNativeEvent().getKeyCode(), он возвращает только 0.

Любая идея, какисправить.

Спасибо,

Ответы [ 4 ]

3 голосов
/ 05 июля 2011

Я предпочитаю использовать KeyUpEvent, потому что пользователь не может отличить его от KeyPressEvent, поэтому вот мое решение:

void onKeyUp(KeyUpEvent event) {
  if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
    // Handle key press
  }
}
1 голос
/ 23 февраля 2011

Java-Doc KeyEvent предупреждает, что идиосинкразии браузера при обработке клавиатуры не полностью нормализуются GWT. Ниже приводится цитата из документов:

Нативные события клавиатуры немного беспорядочные (http://www.quirksmode.org/js/keys.html), здесь мы делаем некоторую тривиальную нормализацию, но не пытаемся выполнять какие-либо сложные исправления, поэтому пользователь должен быть предупрежден.

Это означает, что браузер не согласован в том, как он запускает различные события клавиатуры, и вы должны обрабатывать причуды в своем собственном коде.

Прочитайте http://www.quirksmode.org/js/keys.html, чтобы узнать больше.

0 голосов
/ 23 февраля 2011

KeyPressEvent для нажатий клавиш, которые приводят к действительному коду символа - как нажатие клавиши «а».Если вы хотите получать уведомления при нажатии клавиши ввода, используйте KeyDownEvent вместо:

void onEnter(KeyDownEvent event) {
  if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
    // Handle key press
  }
}
0 голосов
/ 23 февраля 2011

Попробуйте вызвать sinkEvents на виджете, который пытается прослушать. Это должно быть сделано сразу после создания виджета.

widget.sinkEvents(Event.KEYEVENTS)

...