【问题标题】:Get the parent of an IStructuredSelection (eclipse-rcp)?获取 IStructuredSelection (eclipse-rcp) 的父级?
【发布时间】:2009-05-29 22:32:43
【问题描述】:

我在视图中有一个 TreeViewer,需要获取所选项目的父项(如果存在)。似乎没有任何效果,谷歌没有给出任何答案..

mBacktestTree.addDoubleClickListener(new IDoubleClickListener() {
                public void doubleClick(DoubleClickEvent event) {
                IWorkbenchPage page = getSite().getPage();
                TreeViewer tree = (TreeViewer) event.getSource();
                Object selectObject = ((IStructuredSelection) tree.getSelection()).getFirstElement();

// now how can I get the parent of selectObject?

【问题讨论】:

    标签: java eclipse swt eclipse-rcp


    【解决方案1】:

    您可以从 ITreeSelection 中获取父级。例如。

    public class DirectoryView extends ViewPart 
    {
        public void createPartControl(Composite parent) 
        {
            TreeViewer treeViewer = new TreeViewer(parent);
            treeViewer.setContentProvider(new DirectoryProvider());
            treeViewer.setInput(new File(System.getProperty("user.home"))); 
            treeViewer.addDoubleClickListener(new IDoubleClickListener() 
            {                    
                public void doubleClick(DoubleClickEvent event) 
                {
                    ITreeSelection selection = ((ITreeSelection)event.getSelection());
                    System.out.println(selection.getPaths()[0].getParentPath().getLastSegment());
                }
            });
        }   
    
        class DirectoryProvider implements ITreeContentProvider
        {
            public Object[] getChildren(Object parentElement) 
            {
                File[] folders = ((File) parentElement).listFiles();
                return folders == null ? new File[0] : folders;
            }
    
            public Object getParent(Object element) 
            {
                return ((File) element).getParent();
            }
    
            public boolean hasChildren(Object element) 
            {
                return getChildren(element).length >0;
            }
    
            public Object[] getElements(Object inputElement) 
            {
                return getChildren(inputElement);
            }
    
            public void dispose() 
            {
                // ignore
            }
    
            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) 
            {
                // ignore
            }
        }
    
        public void setFocus() 
        {
            // ignore
        }
    }
    

    【讨论】:

    • 这非常有效,让我可以使用 getFirstSegment() 获取父级,使用 getLastSegment() 获取子级。如果没有孩子,那么第一个片段等于最后一个片段,或者像这样的检查: selection.getPaths()[0].getPArentPath().getSegmentCount() > 1 谢谢!
    【解决方案2】:

    你也可以从你的树内容提供者那里获得父节点:

    mBacktestTree.addDoubleClickListener(new IDoubleClickListener() {
                        public void doubleClick(DoubleClickEvent event) {
                                IWorkbenchPage page = getSite().getPage();
                                TreeViewer tree = (TreeViewer) event.getSource();
                                Object selectObject = ((IStructuredSelection)tree.getSelection()).getFirstElement();
    
    ITreeContentProvider tcp =tree.getContentProvider();
    Object parent = tcp.getParent(selectObject);
    

    【讨论】:

      猜你喜欢
      • 2013-06-13
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2014-01-25
      相关资源
      最近更新 更多