GWT:向EditTextCell小部件添加值更改侦听器

时间:2012-04-11 04:30:58

标签: gwt gwt-edittext

我想对网格中的EditTextCell小部件进行验证。所以我试图扩展EditTextCell并添加一个值更改侦听器,以便我可以继续验证。但我无法添加相同的内容。任何帮助,将不胜感激。我使用的是GWT 2.4.0

我的代码看起来像这样。

public class MyEditTextCell extends EditTextCell { 
        public MyEditTextCell() { 
            super(); 
            onValueChange( new ValueChangeHandler<String>() { 
                @Override public void onValueChange( ValueChangeEvent event ) { 
                    Window.alert( "jsdfk" ); 
                } 
            } ); 
        } 
        private void onValueChange( ValueChangeHandler<String> valueChangeHandler ) { 
            Window.alert( "jsdfk" ); 
        } 
    }   

1 个答案:

答案 0 :(得分:1)

使用EditTextCell执行此操作似乎唯一合适的方法是覆盖onBrowserEvent(),类似于EditTextCell类的私有editEvent()方法。

public void onBrowserEvent(Context context, Element parent, String value,
      NativeEvent event, ValueUpdater valueUpdater) {
          super.onBrowserEvent(context, parent, value, event, valueUpdater);
          String type = event.getType();
          if ("keyup".equals(type) || "keydown".equals(type) || "blur".equals(type) {
              validateValue();
          }
  }

但是,监听keyup,keydown和blur事件并不能保证处理实际的更改。 如果您不想跳过任何更改(例如,按上下文右键单击菜单粘贴文本),则应添加com.google.gwt.user.client.Timer来检查值。计时器应该在焦点上运行并停止模糊。

如果你想以'event way'编码 1)用ValueChangeEvent.fire替换validateValue()(this,vale); 2)添加到你的MyEditTextCEll接口HasValueChangeHandlers并像这样实现它

public HandlerRegistration addValueChangeHandler(
      ValueChangeHandler<String> handler) {
    return addHandler(handler, ValueChangeEvent.getType());
  }