2009-10-10 52 views
0

我使用GWT-Ext库为webapp构建GUI。 我想处理一个ENTER键的数字字段内。在GWT-Ext的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

好的,最后解决了。 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); 
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());   
    } 
}); 
1

一些方法已弃用,我在我的简单登录表单上使用以下代码:

KeyDownHandler handler = new KeyDownHandler() { 

     @Override 
     public void onKeyDown(KeyDownEvent event) { 
      if (event.getNativeKeyCode() == 13) { 
       btnLogin.click(); 
      } 
     } 
    }; 
    tbLogin.addKeyDownHandler(handler); 
    tbPassword.addKeyDownHandler(handler);