我使用GWT-Ext库为webapp构建GUI。 我想在NumberField中处理一个ENTER键。
应该是这样的:
final NumberField requiredHeight = new NumberField();
requiredHeight.setValue(125);
requiredHeight.setAllowBlank(false);
requiredHeight.setAllowNegative(false);
requiredHeight.setAllowDecimals(false);
KeyListener listener = new KeyListener() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==13)
addPortlet(requiredHeight.getValue().intValue());
}
};
requiredHeight.addKeyListener(listener);
但代码没有做任何事情! 我究竟做错了什么?一般来说,将这样的处理程序添加到字段的最佳方法是什么?
答案 0 :(得分:4)
好的,终于解决了。 KeyListener中还有另一个回调函数 - componentKeyPress
而不是keyPressed
。这是正确的代码:
KeyListener listener = new KeyListener() {
@Override
public void componentKeyPress(ComponentEvent event) {
if(event.getKeyCode()==13)
{
addPortlet(requiredHeight.getValue().intValue());
}
super.componentKeyPress(event);
}
};
requiredHeight.addKeyListener(listener);
答案 1 :(得分:1)
不推荐使用某些方法,我在简单登录表单上使用以下代码:
KeyDownHandler handler = new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
if (event.getNativeKeyCode() == 13) {
btnLogin.click();
}
}
};
tbLogin.addKeyDownHandler(handler);
tbPassword.addKeyDownHandler(handler);
答案 2 :(得分:0)
注册一个键监听器实际上会将监听器注册到3个不同的事件:key-up,key-down和key-press,其中两个在你的情况下完全没有意义。
更紧凑的解决方案是使用通用侦听器,如下所示:
(原谅我使用匿名监听器类,它更快但显然具有相同的效果)
import com.extjs.gxt.ui.client.event.Events;
requiredHeight.addListener(Events.OnKeyPress, new Listener<ComponentEvent>() {
@Override
public void handleEvent(ComponentEvent e) {
if (e.getKeyCode()==13)
addPortlet(requiredHeight.getValue().intValue());
}
});