0

我使用 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);

但是代码什么也没做!我究竟做错了什么?一般来说,将这样的处理程序添加到字段的最佳方法是什么?

4

3 回答 3

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);
于 2009-10-13T07:57:26.267 回答
1

不推荐使用某些方法,我在简单的登录表单上使用以下代码:

    KeyDownHandler handler = new KeyDownHandler() {

        @Override
        public void onKeyDown(KeyDownEvent event) {
            if (event.getNativeKeyCode() == 13) {
                btnLogin.click(); 
            }
        }
    };
    tbLogin.addKeyDownHandler(handler);
    tbPassword.addKeyDownHandler(handler);
于 2015-03-13T06:17:26.187 回答
0

注册按键侦听器实际上会将侦听器注册到 3 个不同的事件:上键、下键和按键,其中两个在您的情况下完全没有意义。

一个更紧凑的解决方案是使用通用侦听器,如下所示:(
请原谅我使用匿名侦听器类,它更快但显然具有相同的效果)

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());           
    }
});
于 2013-05-01T16:36:11.677 回答