我的代码:
@Override
public void onKeyPress(KeyPressEvent event)
{
if (event.getCharCode() == KeyCodes.KEY_ENTER)
{
registerButton.click();
}
}
这是附加到TextBox,当我按Enter键时它会激活。 event.getCharCode()
只是零,而不是13
。当我按Tab键时,它是0
,当我按下escape时,它是0
。哎呀!
昨天这个工作正常,项目中其他地方发生了一些变化,影响了这一点 - 但我不确定它是什么。看起来好像在最后一天没有做出相关的改变。
如果我处理KeyUpEvent
,则按预期工作。
我正在使用GWT 2.1.0。谢谢你的任何想法!
答案 0 :(得分:38)
KeyPressHandler
例如用于 SHIFT , CTRL , ALT 键。
如果您想将活动附加到其他密钥,则必须使用KeyDownHandler
。
nameField.addKeyDownHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
Window.alert("hello");
}
}
});
答案 1 :(得分:9)
或者你可以试试这个
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
}
答案 2 :(得分:4)
应该使用KeyUpHandler而不是KeyPresshandler。
newSymbolTextBox.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
addStock();
}
}
});
答案 3 :(得分:2)
他们可能会改变FF上的行为。我正在使用GWT 2.4.0和Firefox 10.根据这个comment,你应该在解决问题之前使用下面的内容:
@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.
}
}
答案 4 :(得分:1)
从2.0.4更新到2.2.1时遇到了同样的问题,所以它似乎与gwt代码有关。
部分问题是KeyPressedEvent表示本机(即特定于浏览器)的按键事件。在您就此问题提交的bug中,其中一条评论说:
然而,预期“转义”不生成KeyPressEvent(IE和WebKit行为);你必须使用KeyDown或KeyUp。 不幸的是,Firefox(和Opera)发布了比其他更多的按键事件(IE和WebKit,它们具有最明智的实现,W3C即将在DOM 3事件中标准化,AFAICT),但在这种情况下,getCharCode()为0所以你可以安全地忽略它们。一个例外(可能还有其他例外)是“输入”键。 浏览器中的键/字符事件是如此混乱,以至于GWT对于使事物同质化没有太大作用(至少目前为止)。
在解决这个问题之前,最好的办法是使用KeyDownHandler或KeyUpHandler的解决方法。
答案 5 :(得分:0)
GWT 2.5:
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
// Event
}
}