2016-10-31 8 views
0

이것은 EditTextCell 내 구현 :GWT EditTextCell을 상속 몇 가지 방법, 철 재정의하는 방법 : 편집 (컨텍스트 컨텍스트 요소의 부모, 문자열 값)

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()); 
     } 
    } 
} 

내가 입력 텍스트 싶습니다에 대해 표시 할을 빈 셀에만 해당됩니다. IT가 edit() 메소드를 오버라이드 (override) 한 이유입니다. Oryginal EditTextCell의 나머지 동작은 정상이므로 변경하지 않았습니다.

이 것은 불행히도 작동하지 않습니다. 도와주세요.

답변

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을 추가, 기억하십시오. 당신이 비 비어있는 셀의 값을 편집하면

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); 

, 통지, 에디터가 후 표시되지 않습니다하시기 바랍니다 : 여기에

당신은 하나의 String 포함하는 간단한 테이블 형식의 전체 작업 예를 그.

+0

그래서'edit()'메소드를 오버라이드해서는 안됩니까? 대신에'onBrowserEvent()'를 오버라이드해야합니까? – masterdany88

+0

'edit()'메소드를 오버라이드 할 수 있어야합니다. (사실 지금은 더 나은 해결책이라고 생각합니다). 그래서 당신의 접근 방식은 괜찮을 것입니다. 값이 null이 아닌지 확인해야합니다. 또, getValue() 메소드를 참조 - null를 돌려 주어서는 안된다. – Adam

+0

어쩌면 더 나은 솔루션 일 수도 있지만, 실제로는 작동하지 않습니다 !!! 2.6.1 버전의 버그 일 수 있습니다. – masterdany88