TableViewer的EditingSupport with String输入

时间:2014-09-18 13:50:50

标签: java swt jface editing tableviewer

我使用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}}封装到某个类或是否有更优雅的解决方案?

1 个答案:

答案 0 :(得分:1)

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

我在Eclipse源代码中可以看到的EditingSupport的所有用途都是这样做的。

相关问题