VIRTUALモードのSWTツリーでsetDataイベントをプログラムでトリガーすることは可能ですか?
3 に答える
WidgetのnotifyListeners
-methodはこれを行います。
tree.notifyListeners(SWT.SetData, <EventData>)
ただし、適切なイベントを作成して引き渡す必要があります。
これらの追加情報が誰かにとって役立つ場合に備えて、私にとってはうまくいったFabian Zeindlの答えを補足したいと思います。
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);
Sam Zheng、2年後、あなたが答えを見つけたことを願っていますが、ここでは真実を求める他の人のために:
ルート レベルのアイテムにはTree.clear(index,boolean)
またはメソッドを使用し、ルートの下のアイテムにはまたはメソッドを使用します。Tree.clearAll(boolean)
TreeItem.clear(index,boolean)
TreeItem.clear(boolean)