微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在TreeViewer的扩展中添加子项

如何解决在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);
                    
    }
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。