2012-04-11 34 views
1

我想在电网EditTextCell部件做验证。所以我想延长EditTextCell并添加值变化监听器一样,所以,我可以确认继续。但我无法添加相同的内容。任何帮助,将不胜感激。我使用GWT 2.4.0GWT:添加值变化监听到EditTextCell部件

我的代码看起来是这样的。

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"); 
     } 
    } 
+0

“但我无法添加相同的。”你有什么尝试?提供代码或错误栈跟踪 – 2012-04-11 04:49:41

+0

公共类MyEditTextCell延伸EditTextCell { 公共MyEditTextCell() \t { \t \t超级(); \t \t onValueChange(新ValueChangeHandler () \t \t { \t \t \t @Override \t \t \t公共无效onValueChange(ValueChangeEvent事件) \t \t \t { \t \t \t \t Window.alert( “jsdfk”); \t \t \t} \t \t}); \t} \t私人无效onValueChange(ValueChangeHandler valueChangeHandler) \t { \t \t Window.alert( “jsdfk”); \t} } – 2012-04-11 05:22:08

回答

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(this,vale)替换validateValue(); 2)添加到您的MyEditTextCEll接口HasValueChangeHandlers并实施这样

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