3

是否可以在 VIRTUAL 模式下以编程方式在 SWT 树上触发 setData 事件?

4

3 回答 3

1

notifyListenersWidget 中的- 方法就是这样做的。

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

但是,您必须构建并移交适当的事件。

于 2012-05-16T20:26:53.130 回答
1

我只想补充Fabian Zeindl回答,它对我有用,以防这些附加信息对某人有用。

使用SWT.VIRTUAL标志时,元素会TreeItem在滚动到视图时按需加载。我想在 a 中选择一个TreeViewer尚未加载的元素,因为TreeItemviewer.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);
于 2015-11-23T11:28:15.747 回答
0

Sam Zheng,两年后我当然希望你找到答案,但这里是为其他寻求真理的人准备的:

对根级项使用Tree.clear(index,boolean)or方法,对根级以下的项使用or方法。Tree.clearAll(boolean)TreeItem.clear(index,boolean)TreeItem.clear(boolean)

于 2014-10-24T18:56:15.290 回答