我使用TableViewer
来显示逗号分隔的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
转换为我用于输入的数据类型,然后调用setter。但是因为我使用不可变的String
,所以我只能用新的String
替换旧element
。显然,TableViewer
实例与String
使用的实例不同,因为表中的值未设置。
我是否需要将{{1}}封装到某个类或是否有更优雅的解决方案?
答案 0 :(得分:1)
是的,您需要将字符串包装在一个可变对象中,以便您可以将值更改为新字符串。
我在Eclipse源代码中可以看到的EditingSupport的所有用途都是这样做的。