Java SWT、TreeViewer、带组合框的CellEditor
在TreeViewer中对treeColumn使用EditingSupport时,是否有任何方法可以只反映视图中的更改,而不是更改模型,然后使用getViewer().update(元素,null) 详情: 我希望实现以下功能: 显示具有|对象|(组合框)属性的树视图| 选择并单击按钮后,我想向用户显示更改摘要,然后单击确认,我想将这些更改应用于模型(对象) 我使用的是TreeViewer,其中有一列启用了EditingSupport。 每当我从组合框中选择一个值并单击其他地方(lostFocus)时,该值就会设置为默认值。 我发现调用SetValue()后,会再次调用TreeLabelProvider(使用调试点) 是否有任何方法可以只反映视图中的更改,而不是更改模型并使用getViewer().update(element,null) 一些FYIs: 包对象包含多个版本 ContentProvider执行获取对象的作业 LabelProvider从包中获取所有版本(字符串[]),并显示第一个版本Java SWT、TreeViewer、带组合框的CellEditor,java,swt,jface,Java,Swt,Jface,在TreeViewer中对treeColumn使用EditingSupport时,是否有任何方法可以只反映视图中的更改,而不是更改模型,然后使用getViewer().update(元素,null) 详情: 我希望实现以下功能: 显示具有|对象|(组合框)属性的树视图| 选择并单击按钮后,我想向用户显示更改摘要,然后单击确认,我想将这些更改应用于模型(对象) 我使用的是TreeViewer,其中有一列启用了EditingSupport。 每当我从组合框中选择一个值并单击其他地方(lostFocu
//创建UI的代码 //废话
操作编辑支持类
private class OperationEditingSupport extends EditingSupport {
private ComboBoxCellEditor cellEditor = null;
private OperationEditingSupport(ColumnViewer viewer) {
super(viewer);
cellEditor = new ComboBoxCellEditor(
((TreeViewer) viewer).getTree(), new String[] {},
SWT.READ_ONLY);
}
@Override
protected CellEditor getCellEditor(Object element) {
// TODO Auto-generated method stub
if (element instanceof IPackageInfo) {
IPackageInfo pkg = (IPackageInfo) element;
cellEditor.setItems(PackageMgrUtil.getInstance().getVersions(
(IdmPackage) pkg, false, true));
return cellEditor;
}
return null;
}
@Override
protected boolean canEdit(Object element) {
return true;
}
@Override
protected Object getValue(Object element) {
// TODO Auto-generated method stub
return 0;
}
@Override
protected void setValue(Object element, Object value) {
/* only set new value if it differs from old one */
}
}
***************************************************
当我点击column2的单元格时,我得到了组合框,但当我选择某个内容并将焦点移动到其他地方时,它再次显示默认值
调试时,我发现:
它再次调用标签提供程序,它获取包的所有版本,然后显示第一个版本,因此我看不到任何更改
我想要的是,它应该在不改变底层对象的情况下保持选择的完整性
谢谢你的帮助。找到了答案。
下面添加到SetValue()方法的代码解决了这个问题
m_tree = (Tree)getViewer.getControl();
TreeItem[] ti = m_tree.getSelection();
CCombo c = ((CCombo)cellEditor.getControl());
String str = c.getItem(c.getSelectionIndex());
ti[0].setText(1, str );
请显示您拥有的代码,并准确指定不起作用的部分。树和模型应始终同步
m_tree = (Tree)getViewer.getControl();
TreeItem[] ti = m_tree.getSelection();
CCombo c = ((CCombo)cellEditor.getControl());
String str = c.getItem(c.getSelectionIndex());
ti[0].setText(1, str );