2013-01-15 50 views
1

如何僅在我的TreeViewer中顯示工作區的內容?如何在TreeViewer中僅顯示工作區的內容?

這是我的主要觀點類:

import org.eclipse.jface.viewers.TreeViewer; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.ui.part.ViewPart; 

public class MainView extends ViewPart { 
    public static final String ID = "com.MainView"; 

    public MainView() { 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void createPartControl(Composite parent) { 
     TreeViewer tv = new TreeViewer(parent); 
     tv.getTree().setLayoutData(new GridData(GridData.FILL_BOTH)); 
     tv.setContentProvider(new FileTreeContentProvider()); 
     tv.setLabelProvider(new FileTreeLabelProvider()); 
     tv.setInput(ResourcesPlugin.getWorkspace()); 
    } 

    @Override 
    public void setFocus() { 
     // TODO Auto-generated method stub 

    } 

} 

這是我的內容提供商類:

import org.eclipse.core.resources.IFile; 
import org.eclipse.core.resources.IFolder; 
import org.eclipse.core.resources.IProject; 
import org.eclipse.core.resources.IWorkspace; 
import org.eclipse.core.resources.IWorkspaceRoot; 
import org.eclipse.core.resources.ResourcesPlugin; 
import org.eclipse.core.runtime.CoreException; 
import org.eclipse.jface.viewers.ITreeContentProvider; 
import org.eclipse.jface.viewers.Viewer; 

public class FileTreeContentProvider implements ITreeContentProvider { 

    public void dispose() { 

    } 

    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { 

    } 

    public Object[] getElements(Object inputElement) { 
     return null; 
    } 

    public Object[] getChildren(Object parentElement) { 
     if (parentElement instanceof IProject) { 
      IProject projects = (IProject) parentElement; 
      try { 
       return projects.members(); 
      } catch (CoreException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     if (parentElement instanceof IFolder) { 
      IFolder ifolder = (IFolder) parentElement; 
      try { 
       return ifolder.members(); 
      } catch (CoreException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     return null; 
    } 

    public Object getParent(Object element) { 
     if (element instanceof IProject) { 
      IProject projects = (IProject) element; 
      return projects.getParent(); 
     } 
     if (element instanceof IFolder) { 
      IFolder folder = (IFolder) element; 
      return folder.getParent(); 
     } 
     if (element instanceof IFile) { 
      IFile file = (IFile) element; 
      return file.getParent(); 
     } 
     return null; 
    } 

    public boolean hasChildren(Object element) { 
     if (element instanceof IProject) { 
      IProject projects = (IProject) element; 
      try { 
       return projects.members().length > 0; 
      } catch (CoreException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     if (element instanceof IFolder) { 
      IFolder folder = (IFolder) element; 
      try { 
       return folder.members().length > 0; 
      } catch (CoreException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     return false; 
    } 

} 

這是我的標籤供應商類:

import org.eclipse.core.resources.IFile; 
import org.eclipse.core.resources.IFolder; 
import org.eclipse.core.resources.IProject; 
import org.eclipse.jface.viewers.ILabelProvider; 
import org.eclipse.jface.viewers.ILabelProviderListener; 
import org.eclipse.swt.graphics.Image; 

public class FileTreeLabelProvider implements ILabelProvider { 

    public void addListener(ILabelProviderListener listener) { 

    } 

    public void dispose() { 

    } 

    public boolean isLabelProperty(Object element, String property) { 

     return false; 
    } 

    public void removeListener(ILabelProviderListener listener) { 

    } 

    public Image getImage(Object element) { 

     return null; 
    } 

    public String getText(Object element) { 
     if (element instanceof IProject) { 
      String text = ((IProject) element).getName(); 
      return text; 
     } 
     if (element instanceof IFolder) { 
      String text = ((IFolder) element).getName(); 
      return text; 
     } 
     if (element instanceof IFile) { 
      String text = ((IFile) element).getName(); 
      return text; 
     } 

     return null; 
    } 
} 
+1

這段代碼做了什麼?什麼行得通/什麼不行?它會拋出異常嗎?它是否返回空?如果我們不知道發生了什麼,很難找出問題。 –

+0

代碼返回null ..im不知道如何使用IFolder獲取文件夾和IFiles以獲取文件.. –

+0

http://cvalcarcel.wordpress.com/2009/11/14/writing-an-eclipse- plug-in-part-11-common-navigator-displays-custom-resources-or-refresh-or-die-or-the-magic-of-navigatorcontent /我發現這個網站顯示瞭如何使用資源來獲取工作區但沒有說明使用文件夾。如果我想使用文件夾我需要文件Ipath.But我沒有IPath值。我能夠得到原始位置,但它沒有幫助。 –

回答

0
public Object[] getElements(Object inputElement) { 
     return ResourcesPlugin.getWorkspace().getRoot().getProjects(); 
    } 

我我現在能夠獲得項目。我的代碼是worki NG

0

內容提供商和工作區對象的標籤供應商都已經存在於Eclipse框架:

使用它們,你的代碼看起來像這樣:

TreeViewer treeViewer = new TreeViewer(parent); 
treeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH)); 
treeViewer.setContentProvider(new WorkbenchContentProvider()); 
treeViewer.setLabelProvider(new WorkbenchLabelProvider()); 
treeViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());