2009-05-29 8 views
3

J'ai un TreeViewer dans une vue et j'ai besoin d'obtenir le parent (s'il existe) d'un élément sélectionné. Rien ne semble fonctionner et google ne donne aucune réponse.Récupère le parent d'une 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? 

Répondre

7

Vous pouvez obtenir le parent à partir d'une sélection ITree. Par exemple.

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

Cela a parfaitement fonctionné et m'a permis d'obtenir le parent avec getFirstSegment() et l'enfant avec getLastSegment(). S'il n'y a pas d'enfants alors le premier segment est égal au dernier, ou avec une vérification comme: selection.getPaths() [0] .getPArentPath(). GetSegmentCount()> 1 merci! –

4

Vous pouvez également obtenir le parent de votre fournisseur de contenu d'arbre:

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

Merci encore, aussi utile –

Questions connexes