2009-05-29 6 views
3

私はビュー内にTreeViewerを持っており、選択されたアイテムの親(存在する場合)を取得する必要があります。何も動いていないようにみえとGoo​​gleはITreeSelectionから親を取得することができますIStructuredSelection(eclipse-rcp)の親を取得しますか?

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? 

答えて

7

...何の答えが得られません。例えば。

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 
    } 
} 
+0

は、これは完全に働いた、とgetFirstSegment持つ親()とgetLastSegmentとの子供を()得るために私を可能にしました。子がない場合、最初のセグメントは最後のセグメントと等しいか、次のようなチェックを行います。 selection.getPaths()[0] .getPArentPath()。getSegmentCount()> 1 ありがとう! –

4

また、あなたのツリーのコンテンツプロバイダから親を取得することができます。

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); 
+0

もう一度お返事ありがとうございます –

関連する問題