2012-05-15 47 views

回答

1

notifyListeners-Widget中的方法是這樣做的。

tree.notifyListeners(SWT.SetData, <EventData>) 

你必須構建並交出適當的事件。

+0

這不是我想要的,因爲使用此功能,必須要創建的事件的數據。無論如何,我終於繞過了這個問題。 –

+0

@三正:怎麼樣? – Sk8erPeter

+0

謝謝,Fabian,它爲我工作。 +1! [Here](http://stackoverflow.com/a/33869980/517705)是我的案例的簡短描述。 – Sk8erPeter

0

山姆鄭,兩年下來路上,我當然希望你找到了你的答案,但在這裏它是爲真理而其他求職者:

使用Tree.clear(index,boolean)Tree.clearAll(boolean)方法根級別項目,TreeItem.clear(index,boolean)TreeItem.clear(boolean)方法的根目錄下的項目。

+0

這不適合我,它不觸發'SWT.SetData'事件。雖然Fabian的[建議](http://stackoverflow.com/a/10626178/517705)確實[work](http://stackoverflow.com/a/33869980/517705)。 – Sk8erPeter

1

我只是想補充Fabian Zeindlanswer,這對我很有幫助,以防這些附加信息對某人有用。

當使用SWT.VIRTUAL標誌時,元素在滾動到視圖中時按需加載爲TreeItem。我想選擇TreeViewer中尚未作爲TreeItem加載的元素,這使得viewer.setSelection()無法工作。
這意味着給定的元素必須顯式加載爲TreeItem。

下面是該簡化的示例代碼工作:

final Tree treeViewerTree = treeViewer.getTree(); 
// we now assume that the indexOfElementToSelect value is set to a correct value (which is a lower value than treeViewerTree.getItemCount()!!) 
TreeItem treeItem = treeViewerTree.getItem(indexOfElementToSelect); 
final boolean isVirtualTree = (treeViewerTree.getStyle() & SWT.VIRTUAL) != 0; 
if(isVirtualTree) { 
    // trigger SWT.SetData event programmatically on SWT tree in VIRTUAL mode which loads the item explicitly 
    Event virtualTreeEvent = new Event(); 
    virtualTreeEvent.index = indexOfElementToSelect; 
    virtualTreeEvent.item = treeItem; 
    // triggering SWT.SetData programmatically 
    treeViewerTree.notifyListeners(SWT.SetData, virtualTreeEvent); 
} 

treeViewer.setSelection(new StructuredSelection(........), true); 
相關問題