2012-04-11 33 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()); 
    }