2009-05-29 4 views
3

뷰에 TreeViewer가 있고 선택한 항목의 부모 (존재하는 경우)를 가져와야합니다. 아무것도 작동하지 않는 것 같아요. 구글 대답이 없습니다.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

당신은 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 
    } 
} 
+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

다시 한번 감사드립니다. –