2014-09-18 8 views
1

TableViewer을 사용하여 쉼표를 String으로 구분하여 표시합니다. 구현은 다음과 같습니다.TableViewer의 EditingSupport with String 입력

TableViewer tblvwrGroupAssignments = new TableViewer(container, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); 
Table tblGroupAssignments = tblvwrGroupAssignments.getTable(); 
tblGroupAssignments.setLinesVisible(true); 
tblGroupAssignments.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 2)); 
final TableViewerColumn clmnGroupAssignments = new TableViewerColumn(tblvwrGroupAssignments, SWT.NONE); 
tblGroupAssignments.addListener(SWT.Resize, new Listener() 
{ 
    @Override 
    public void handleEvent(Event event) 
    { 
     clmnGroupAssignments.getColumn().pack(); 
    } 
}); 
tblvwrGroupAssignments.setContentProvider(new IStructuredContentProvider() 
{ 
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput){} 
    public void dispose(){} 

    @Override 
    public Object[] getElements(Object inputElement) 
    { 
     String[] toRet = ((String)inputElement).split(","); 
     for (int i = 0; i < toRet.length; i++) 
     { 
      toRet[i] = toRet[i].trim(); 
     } 
     return toRet; 
    } 
}); 
tblvwrGroupAssignments.setUseHashlookup(true); 
tblvwrGroupAssignments.setLabelProvider(new GroupAssignmentLabelProvider()); //responsible for displaying the last line italic 
tblvwrGroupAssignments.setInput("HW_ADMIN, <Add new value here>"); 

위의 코드는 정상적으로 작동합니다. 내가 가진 문제는 다음과 같은 방법에 대해 정확히 말하면, 약 EditingSupport입니다 :

@Override 
protected void setValue(Object element, Object value) 
{ 
    element = value; 
    viewer.update(element, null); 
} 

가 보통 나는 내가 입력에 사용되는 데이터 형식에 element 캐스팅 후 세터를 호출 하죠. 그러나 내가 불변 인 String과 함께 일하기 때문에 오직 이전의 String을 새 것으로 바꿀 수 있습니다. 테이블의 값이 설정되어 있지 않으므로 element 인스턴스가 TableViewer에서 사용하는 인스턴스와 같지 않음이 분명합니다.

어떤 클래스에 String을 캡슐화해야하나요, 아니면 좀 더 우아한 해결책이 있습니까?

답변

1

예, 값을 새 문자열로 변경할 수 있도록 문자열을 변경 가능 개체로 래핑해야합니다.

이클립스 소스에서 볼 수있는 EditingSupport의 모든 용도가이 작업을 수행합니다.