keyPressEvent.getCharCode () возвращает 0 для всех специальных клавиш, таких как ввод, вкладка, escape и т. д. - PullRequest
32 голосов
/ 07 ноября 2010

Мой код:

@Override
public void onKeyPress(KeyPressEvent event)
{
    if (event.getCharCode() == KeyCodes.KEY_ENTER)
    {
        registerButton.click();
    }
}

Это прикреплено к TextBox, и оно срабатывает, когда я нажимаю Enter. event.getCharCode() это просто ноль, а не 13. Когда я нажимаю клавишу табуляции, это 0, а когда я нажимаю escape, это 0. Argh!

Вчера это работало правильно, и что-то изменилось где-то еще в проекте, чтобы повлиять на это - но я не уверен, что это могло быть. Похоже, что за последний день не было внесено соответствующих изменений.

Если вместо этого я обработаю KeyUpEvent, это будет работать как ожидалось.

Я использую GWT 2.1.0. Спасибо за любые идеи!

Ответы [ 6 ]

38 голосов
/ 09 ноября 2010

KeyPressHandler используется, например, для клавиш SHIFT , CTRL , ALT .

Если вы хотите прикрепитьсобытие для другого ключа вы должны использовать KeyDownHandler.

nameField.addKeyDownHandler(new KeyDownHandler() {

    @Override
    public void onKeyDown(KeyDownEvent event) {
        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
            Window.alert("hello");
        }

    }

});
9 голосов
/ 12 ноября 2010

или вы можете попробовать это

if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
}
4 голосов
/ 27 января 2013

KeyUpHandler должен использоваться вместо KeyPresshandler.

newSymbolTextBox.addKeyUpHandler(new KeyUpHandler() {
    @Override
    public void onKeyUp(KeyUpEvent event) {
        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
            addStock();
        }
    }
});
2 голосов
/ 19 февраля 2012

Они могут изменить поведение на FF.Я использую GWT 2.4.0 и Firefox 10. Согласно этому комментарию , вы должны использовать что-то вроде ниже, прежде чем они решат проблему:

@Override
public void onKeyPress(KeyPressEvent event) {
    int keyCode = event.getUnicodeCharCode();
    if (keyCode == 0) {
        // Probably Firefox
        keyCode = event.getNativeEvent().getKeyCode();
    }
    if (keyCode == KeyCodes.KEY_ENTER) {
        // Do something when Enter is pressed.
    }
}
1 голос
/ 15 апреля 2011

У меня возникла такая же проблема при обновлении с 2.0.4 до 2.2.1, так что, похоже, это связано с кодом gwt.

Отчасти проблема заключается в том, что KeyPressedEvent представляет собой собственное (то есть для браузера) событие нажатия клавиши.В ошибке , поданной вами по этому вопросу, один из комментариев гласит:

Однако ожидается, что "escape" не генерирует KeyPressEvent (Поведение IE и WebKit);Вы должны использовать KeyDown или KeyUp для тех.К сожалению, Firefox (и Opera) генерирует гораздо больше событий нажатия клавиш, чем другие (IE и WebKit, которые имеют наиболее разумную реализацию, ту, которую W3C собирается стандартизировать в DOM 3 Events, AFAICT), но в этом случае getCharCode () имеет значение 0так что вы можете спокойно их игнорировать.Единственным исключением (могут быть и другие) является клавиша «ввод».События key / char в браузерах настолько беспорядочные, что GWT мало что делает для гомогенизации (по крайней мере, на данный момент).

Пока этот беспорядок не будет решен, лучше всего использоватьОбходной путь с KeyDownHandler или KeyUpHandler.

0 голосов
/ 26 февраля 2013

GWT 2.5:

public void onKeyPress(KeyPressEvent event) {
    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
        // Event
    }
}
...