32

我的代码:

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

它附加到一个文本框,当我按下回车键时它会触发。 event.getCharCode()只是零,不是13。当我按 Tab 时,它是0,当我按 Escape 时,它​​是0. 啊!

这昨天工作正常,项目中的其他地方发生了一些变化来影响这一点 - 但我不确定它可能是什么。最后一天似乎确实没有进行任何相关更改。

相反,如果我处理 a KeyUpEvent,这将按预期工作。

我正在使用 GWT 2.1.0。感谢您的任何想法!

4

6 回答 6

37

例如KeyPressHandler用于SHIFT, CTRL,ALT键。

如果要将事件附加到另一个键,则必须使用KeyDownHandler.

nameField.addKeyDownHandler(new KeyDownHandler() {

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

    }

});
于 2010-11-09T08:58:09.213 回答
8

或者你可以试试这个

if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
}
于 2010-11-11T23:11:36.530 回答
4

应使用 KeyUpHandler 而不是 KeyPresshandler。

newSymbolTextBox.addKeyUpHandler(new KeyUpHandler() {
    @Override
    public void onKeyUp(KeyUpEvent event) {
        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
            addStock();
        }
    }
});
于 2013-01-27T12:43:50.453 回答
2

他们可能会改变 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.
    }
}
于 2012-02-19T08:26:57.247 回答
1

我从 2.0.4 更新到 2.2.1 时遇到了同样的问题,所以它似乎与 gwt 代码有关。

问题的一部分是 KeyPressedEvent 表示本机(即特定于浏览器的)按键事件。在您提交的关于此问题的错误中,其中一条评论说:

然而,预计“escape”不会生成KeyPressEvent(IE 和 WebKit 行为);你必须使用 KeyDown 或 KeyUp 。不幸的是,Firefox(和 Opera)触发了比其他事件更多的按键事件(IE 和 WebKit,它们具有最合理的实现,W3C 即将在 DOM 3 事件中标准化的事件,AFAICT),但在这种情况下 getCharCode() 为 0所以你可以放心地忽略它们。一个例外(可能还有其他例外)是“输入”键。浏览器中的键/字符事件是如此混乱,以至于 GWT 对同质化事物没有太大作用(至少目前如此)。

在解决这个烂摊子之前,最好的办法是使用 KeyDownHandler 或 KeyUpHandler 的解决方法。

于 2011-04-14T21:40:38.240 回答
0

GWT 2.5:

public void onKeyPress(KeyPressEvent event) {
    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
        // Event
    }
}
于 2013-02-26T10:19:41.230 回答