1

我想对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" ); 
        } 
    }   
4

1 回答 1

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 来检查值。计时器应该在焦点上运行并在模糊时停止。

如果您想以“事件方式”编码 1) 将 validateValue() 替换为 ValueChangeEvent.fire(this, vale); 2)添加到您的 MyEditTextCEll 接口 HasValueChangeHandlers 并像这样实现它

public HandlerRegistration addValueChangeHandler(
      ValueChangeHandler<String> handler) {
    return addHandler(handler, ValueChangeEvent.getType());
  }
于 2012-04-11T06:10:42.650 回答