我是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.
任何想法如何解决。
谢谢,
答案 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>
这意味着浏览器触发不同键盘事件的方式不一致,您应该在自己的代码中处理怪癖。
答案 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
}
}