4

我正在使用CheckedTreeSelectionDialog,我想最初选择一些项目。

如何使用setInitialSelections方法选择子项(level2 项)而不是 level1。

CheckedTreeSelectionDialog dialog = new CheckedTreeSelectionDialog(
    this.containerComposite.getShell(), new myLabelProvider(), new
    myContentProvider());

dialog.setContainerMode(true);
dialog.setInput(new MyModel());

Parent p = new Parent("I am a parent");
p.getChildren.add(new Child("I am a child"));
dialog.setInitialSelection(p);

当 containerMode 为 false 并且为 true 时,不选择子项,例如它选择所有子项的示例。

4

2 回答 2

1

确保在打开对话框
dialog.setInitialElementSelections(model.getAllElements());
之前dialog.open();
完成您的操作: 否则它将无法正常工作。

我有同样的问题 - 我只能标记第一级元素。解决方案是确保这些方法在ITreeContentProvider实现类中工作:

// this is the object that would get passed into setInput()
private MyModelProvider model; 

@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) 
    this.model = (MyModelProvider ) newInput;
}

@Override
public Object getParent(Object element) {
    if (element instanceof Child)
        return model.getCategories().get(0);    // I only have one category 
    return null;
}
于 2013-07-19T09:01:09.953 回答
1

只需使用该方法SelectionDialog#setInitialElementSelections(List elements)并传递要在 a 中选择的元素List

CheckedTreeSelectionDialog dialog = new CheckedTreeSelectionDialog(
this.containerComposite.getShell(), new myLabelProvider(), new myContentProvider());

dialog.setContainerMode(true);
dialog.setInput(new MyModel());

List<Child> list = new ArrayList<Child>();

/* fill your list */

dialog.setInitialElementSelections(list);
于 2012-12-13T14:33:03.897 回答