JFace中TableViewer和TreeViewer的研究

来源:互联网 发布:javascript难吗 编辑:程序博客网 时间:2024/05/13 08:03

1 TreeViewer中的内容提供器函数的说明:

      继承的接口是:ITreeContentProvider

      里面的方法如下:

(1)getElements。

此函数定义为“public Object[] getElements(Object inputElement);”,当程序开始构建树时,首先调用getElements返回一个对象的数组,此数组对象表示当前树的根节点,inputElement参数为TreeViewer的输入(setInput的输入数据)。

(2)hasChildren。

此函数定义为“public boolean hasChildren(Object element);”,当TreeViewer显示一个节点后,会调用hasChildren函数判断当前节点是否有子节点,如果有子节点则显示“+”,element参数为要判断是否有子节点的节点。

(3)getChildren。

此函数定义为“public Object[] getChildren(Object parentElement);”,当用户选择节点打开子节点时,会调用getChildren函数返回下一层子节点,parentElement参数为选择的节点。

(4)getParent。

此函数定义为“public Object getParent(Object element);”,可以通过此方法返回element的父节点。

(5)inputChanged。

此函数定义为“public void inputChanged(Viewer viewer, Object oldInput, Object newInput);”,当输入改变时调用此方法。

(6)dispose。

此函数定义为“public void dispose();”,当树销毁时被调用。

其中,getElements、hasChildren和getChildren是常用的方法,用户通过重写这几种方法构建一棵树,过程如下:通过getElements方法得到根,再通过hasChildren判断根下是否有子节点,如果有子节点,可以通过getChildren得到所有的子节点。

以后为获取资源管理器的代码:

public class FileTreeContentProvider implements ITreeContentProvider{
  @Override
  public Object[] getChildren(Object parentelement) {
   return ((File)parentelement).listFiles(new AllowOnlyFoldersFilter());
  }

  @Override
  public Object[] getElements(Object arg0) {
  
    File[] roots=File.listRoots();//获取根目录列表
    System.out.println(roots[1]);
    List rootFolders=new ArrayList();
    for(int i=0;i<roots.length;i++)
    {
     if(roots[i].isDirectory())
      rootFolders.add(roots[i]);
    }
    return rootFolders.toArray();
  }
  @Override
  public boolean hasChildren(Object parentElement) {
  
   Object[] obj=getChildren(parentElement);
   return obj==null?false:obj.length>0;
  }
  @Override
  public Object getParent(Object element) {


   return ((File)element).getParentFile();
  }
  @Override
  public void dispose() {
   // TODO Auto-generated method stub
   
  }
  @Override
  public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
   // TODO Auto-generated method stub
   
  }
 }
 public class AllowOnlyFoldersFilter implements FileFilter{
  public boolean accept(File pathname)
  {
   return pathname.isDirectory();
  }
  
 }

2 对于TableViewer内容提供器函数说明

   继承借口:IStructuredContentProvider

   相应方法:

(1)getElements定义为“public Object[] getElements(Object inputElement)”,返回Object[]对象数组,其中数组中每一个对象代表表格的一列。当TableViewer输入数据后,内容管理器将根据输入数据构造表格对象数据。

 class FileTableContentProvider implements IStructuredContentProvider{
  @Override
  public void dispose() {
   // TODO Auto-generated method stub
   
  }
  @Override
  public Object[] getElements(Object inputElement) {


   File file=(File)inputElement;
   return file.listFiles();
  }
  @Override
  public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
   // TODO Auto-generated method stub
   
  }
  
 }

3 TreeViewer的标签提供器ILabelProvider

ILabelProvider主要实现getImage和getText函数。当TreeViewer得到一个节点后会通过getText得到此节点的显示文本,通过getImage方法得到节点的显示图标

4TableViewer的标签提供器ITableLabelProvider

getColumnText:此函数定义为“public String getColumnText(Object element, int columnIndex)”,其中element表示单元格所在行的对象,columnIndex表示单元格所在的列,返回显示的文本

getColumnImage:此函数定义为“public Image getColumnImage(Object element, int columnIndex)”,其中element表示单元格所在行的对象,columnIndex表示单元格所在的列,返回此单元格的显示图标

 class FileTableLabelProvider implements ITableLabelProvider{
  @Override
  public void addListener(ILabelProviderListener arg0) {
   // TODO Auto-generated method stub
   
  }
  @Override
  public void dispose() {
   // TODO Auto-generated method stub
   
  }
  @Override
  public Image getColumnImage(Object element, int index) {
   // TODO Auto-generated method stub
   return null;
  }
  @Override
  public String getColumnText(Object arg0, int arg1) {
   File file=(File)arg0;
   if(arg1==0)
    return file.getName();
   if(arg1==1){
    if(file.isDirectory())
     return "文件夹";
    else
     return "文件";
   }
   if(arg1==2)
   {
    if(file.isDirectory())
     return "";
    else
     return file.length()+"kb";
   }
   if(arg1==3)
   {
    Date date=new Date(file.lastModified());
    return date.toLocaleString();
   }
   return null;
  }
  @Override
  public boolean isLabelProperty(Object arg0, String arg1) {
   // TODO Auto-generated method stub
   return false;
  }
  @Override
  public void removeListener(ILabelProviderListener arg0) {
   // TODO Auto-generated method stub
   
  }
  public FileTableLabelProvider() {
   // TODO Auto-generated constructor stub
  }
 }