2016-10-31 8 views
0

これはEditTextCellの私の実装です:EditTextCellを継承し、いくつかのメソッドをオーバーライドする方法GWT、FE:編集(コンテキストコンテキスト、要素の親、文字列値)

public class MyEditTextCell extends EditTextCell { 

    @Override 
    protected void edit(Context context, Element parent, String value) { 
     if (value.equals("")) { 
      super.edit(context, parent, value); 
     } else { 
      clearViewData(context.getKey()); 
     } 
    } 
} 

私が示したことをテキスト入力したいです空のセルのみです。それが私がedit()メソッドをオーバーライドした理由です。 Oryginal EditTextCellの残りの動作はOKなので、私はそれを変更していません。

これは不運にも機能しません。助けてください。

答えて

0

EditTextCellでエディタがonBrowserEvent法に示されているので、あなただけの必要があります。

public class MyEditTextCell extends EditTextCell { 
    @Override 
    public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { 
     if(value == null || value.isEmpty()) 
      super.onBrowserEvent(context, parent, value, event, valueUpdater); 
    } 
} 

は、編集した値を保存するために列にFieldUpdaterを追加するために、覚えておいてください。

ここでは一つだけStringを含む単純なテーブルタイプとの完全な作業例を持っています、

public class MyTableType { 

    private String value; 

    public MyTableType(String value) { 
     super(); 
     this.value = value; 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 
} 

CellTable<MyTableType> table = new CellTable<MyTableType>(); 

MyEditTextCell cell = new MyEditTextCell(); 

Column<MyTableType, String> column = new Column<MyTableType, String>(cell) { 
    @Override 
    public String getValue(MyTableType object) { 
     if(object.getValue() == null) 
      return ""; 
     else 
      return object.getValue(); 
    } 
}; 
column.setFieldUpdater(new FieldUpdater<MyTableType, String>() { 
    @Override 
    public void update(int index, MyTableType object, String value) { 
     object.setValue(value); 
    } 
}); 

table.addColumn(column, "Value"); 

ArrayList<MyTableType> values = new ArrayList<MyTableType>(); 
values.add(new MyTableType("one")); 
values.add(new MyTableType("two")); 
values.add(new MyTableType("three")); 
values.add(new MyTableType(null)); 
values.add(new MyTableType("")); 
table.setRowData(values); 

してくださいあなたは非空にセルの値を編集したら、編集者が後に表示されないことに気づきますそれ。

+0

私は 'edit()'メソッドをオーバーライドするべきではありませんか?代わりに 'onBrowserEvent()'をオーバーライドする必要がありますか? – masterdany88

+0

'edit()'メソッドもオーバーライドする必要があります(実際はもっと良い解決策だと思います)。あなたのアプローチはOKであるはずです。おそらく、値がnullでないかどうかを確認する必要があります。 'getValue()'メソッドも参照してください。nullを返すべきではありません。 – Adam

+0

おそらくそれはよりよい解決策ですが、生産上は機能しません!たぶん2.6.1バージョンのバグのようなものかもしれません。 – masterdany88

関連する問題