1

EditTextCellグリッド内のウィジェットの検証を行いたい。そこでEditTextCell、検証を続行できるように、を拡張して値変更リスナーを同じものに追加しようとしています。しかし、私は同じものを追加することはできません。どんな助けでもいただければ幸いです。GWT2.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でこれを行う唯一の適切な方法は、EditTextCellクラスのプライベートeditEvent()メソッドと同様にonBrowserEvent()をオーバーライドすることであるように思われます。

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 に答える