2012-12-13 46 views
4

我正在使用CheckedTreeSelectionDialog我想先選擇一些項目。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。

+0

沒有使用它,但看着API和示例代碼,你有沒有試過路過一家參照兒童進入setInitialSelection方法? –

+0

我試過了,孩子們沒有選擇,但即使他們做了一些父母可能有同樣的孩子,它如何區分?在某種程度上,我不應該給父母/孩子的道路? – user847988

+0

請發佈myContentProvider類的內容。 – tkotisis

回答

1

只需使用方法SelectionDialog#setInitialElementSelections(List elements)並傳遞要在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); 
+0

我試過了,孩子們沒有選擇,但即使他們做了一些父母可能有同樣的孩子,它如何區分?在某種程度上,我不應該給父母/孩子路徑selecT? – user847988

+0

@ user847988他們怎麼能有同樣的孩子?那麼它不會是一棵樹,而是一個圖... – Baz

+0

@ user847988順便說一句:我發現了一個非常類似的問題[這裏](http://stackoverflow.com/questions/13605308/select-all-the-entries-in -a-checkedtreeselectiondialog)與幾乎相同的答案,它似乎工作。 – Baz

1

確保你做你的
dialog.setInitialElementSelections(model.getAllElements());
你打開對話框前:dialog.open();
因爲否則它將無法正常工作。

我有同樣的問題 - 我只能標記fisrt級別的元素。 的解決方案是確保這些方法都在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; 
}