我在我的 GMF 编辑器中使用了一个带有 CheckboxTreeViewer 的自定义对话框,到目前为止效果很好,如下所示:
关闭对话框后,选择的元素保存至今。现在我的问题:
当我再次打开对话框时,所有元素都未选中。所以我认为告诉 treeViewer 最初应该检查特定元素会很容易。
但事实证明这并不容易,因为树最初由根元素组成。在树展开之前不会添加其他元素。通过调用ContentProvider的getChildren(Object parentElement)添加元素。
因此,似乎我最初无法检查特定元素,而是必须提供一种动态方法。我正在寻找类似元素添加侦听器的东西,但似乎不存在。
这是我创建 CheckboxTreeViewer 的部分
Composite container = (Composite) super.createDialogArea(parent);
tv = new CheckboxTreeViewer(container, SWT.MULTI | SWT.H_SCROLL
| SWT.V_SCROLL);
tv.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
tv.setAutoExpandLevel(2);
tv.setContentProvider(new FeaturePropertyDialogContentProvider(this));
tv.setLabelProvider(new FeaturePropertyDialogLabelProvider());
tv.setInput(productLine);
tv.setExpandPreCheckFilters(true);
return container;
这是我的 ContentProvider 的 getChildren 方法:
@Override
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof PL) {
PL p = (PL) parentElement;
return new Object[] { p.getPropertyList() };
}
else if (parentElement instanceof PropertyList) {
PropertyList propertyList = (PropertyList) parentElement;
return propertyList.getGeneralPlatforms().toArray();
} else if (parentElement instanceof GeneralPlatform) {
GeneralPlatform platform = (GeneralPlatform) parentElement;
return platform.getHardwareElements().toArray();
}
} else {
return null;
}
}
对此有什么想法吗?
- - - - - - - - - - 解决方案 - - - - - - - - - - -
我自己找到了以下解决方案,到目前为止对我来说效果很好:
tv.expandAll();
tv.setCheckedElements(preSelectedProperties.toArray());
tv.collapseAll();
tv.expandToLevel(2);