Java TableViewer';s编辑支持字符串输入

Java TableViewer';s编辑支持字符串输入,java,swt,jface,editing,tableviewer,Java,Swt,Jface,Editing,Tableviewer,我使用TableViewer来显示逗号分隔的Strings。实现如下所示: TableViewer tblvwrGroupAssignments = new TableViewer(container, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); Table tblGroupAssignments = tblvwrGroupAssignments.getTable(); tblGroupAssignments.s

我使用
TableViewer
来显示逗号分隔的
String
s。实现如下所示:

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>");
通常我应该将
元素
转换为用于输入的数据类型,然后调用setter。但是因为我使用的是不可变的
String
s,所以我只能用新的
String
替换旧的
。显然,
元素
实例与
TableViewer
使用的实例不同,因为表中的值没有设置


我是否需要将
字符串
封装到某个类中,或者是否有更优雅的解决方案?

是的,您需要将字符串包装到可变对象中,以便将值更改为新字符串

我在Eclipse源代码中看到的EditingSupport的所有用法都可以做到这一点

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