如何拦截Java GWT中的KeyPressEvent?

时间:2011-02-23 10:47:11

标签: java gwt keylistener

我是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 个答案:

答案 0 :(得分:3)

我更喜欢使用KeyUpEvent,因为用户无法将其与KeyPressEvent区分开来,所以这是我的解决方案:

void onKeyUp(KeyUpEvent event) {
  if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
    // Handle key press
  }
}

答案 1 :(得分:1)

JavaDoc of KeyEvent警告键盘处理中的浏览器特性未被GWT完全标准化。以下是文档的引用:

  

本机键盘事件有点混乱(http://www.quirksmode.org/js/keys.html),我们在这里进行一些简单的规范化,但不要尝试任何复杂的修补,因此请警告用户。 / p>

这意味着浏览器触发不同键盘事件的方式不一致,您应该在自己的代码中处理怪癖。

阅读http://www.quirksmode.org/js/keys.html了解详情。

答案 2 :(得分:0)

尝试在尝试收听的小部件上调用sinkEvents。这应该在构建小部件后立即完成。

widget.sinkEvents(Event.KEYEVENTS)

答案 3 :(得分:0)

KeyPressEvent用于产生实际字符代码的按键 - 例如按下'a'键。如果您想在按下回车键时收到通知,请改为使用KeyDownEvent

void onEnter(KeyDownEvent event) {
  if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
    // Handle key press
  }
}