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);
}