在TreeViewer的扩展中添加子项

问题描述

我有一个TreeViewer,其中包含要从其余api获取的带有子元素的元素,因此最初没有用于节点的子元素。我目前要做的是将doubleClickListener添加到节点,并获取所选节点的子代,然后使用树视图器的方法“ expandToLevel”显示它们。我也希望能够通过单击展开箭头来做到这一点。

public void doubleClick(DoubleClickEvent event) {
        IStructuredSelection selection = (IStructuredSelection) event.getSelection();
        Module m = (Module) selection.getFirstElement();
        //----> theChildren are fetched here <---
        m.setStrings(theChildren);
        treeViewer.expandToLevel(m,1);
    }

不幸的是,当我尝试使用treeListener进行操作时,首先调用了内容提供者的getChildren方法,因此返回没有子级的信息。可以在getChildren方法中进行api调用吗?

        treeViewer.addTreeListener(new ITreeViewerListener() {
        
        @Override
        public void treeExpanded(TreeExpansionEvent event) {                
            Module m = (Module) event.getElement();
            //----> theChildren are fetched here <---
            m.setStrings(theChildren);
            
        }
        
        @Override
        public void treeCollapsed(TreeExpansionEvent event) {
            // TODO Auto-generated method stub
            
        }
    });

解决方法

我找到了解决方案。我不知道它是否是最好的,但是它可以工作。 在treeExpanded中,我向treeViewer的扩展添加了异步调用,因此现在显示了子级。

Display.getCurrent().asyncExec(new Runnable() {
                
    @Override
    public void run() {
        treeViewer.expandToLevel(m,1);
                    
    }
});

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...