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
을 캡슐화해야하나요, 아니면 좀 더 우아한 해결책이 있습니까?