eclipse treeViewer的使用 (例程)

内容提供器提供树节点的内容.例子中是在下面代码中产生节点的数据,而实际应用时,则时在另外的类中产生有实际意义的数据,通过getElements(Object inputElement方法获得这些数据.

getElements(Object inputElement,getChildren(Object parentElement),hasChildren(Object element)这三个方法是必须的.

package com.gujin;

import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * 内容提供器。由它决定那些对象应该输出在TreeViewer里显示
 */
public class MyContentProvider implements ITreeContentProvider {
    /**
     * 由这个方法决定树的顶级显示那些对象。在此方法里生成了三个Country对象
     * @param inputElement  用tv.setInput()方法输入的那个对象,在这里没有使用这个对象
     */
    public Object[] getElements(Object inputElement) {
        String[] obj = new String[3];
        obj[0] = "中国";
        obj[1] = "美国";
        obj[2] = "英国";
        return obj;
    }

    /**
     * 由这个方法决定结点应该显示那些子结点。在这里也不管父结点是什么,每个结点都统一有三个字结点
     * @param parentElement 被点击的结点(父结点)
     */
    public Object[] getChildren(Object parentElement) {
        String[] obj = new String[4];
        obj[0] = "桂林";
        obj[1] = "北京";
        obj[2] = "纽约";
        obj[3] = "伦敦";
        return obj;
    }

    /**
     * 判断某结点是否有子结点。在这里不管3721,全返回
     * 真,即都有子结点。这时结点前都有一个“+”号图标
      * @param element 需要判断是否有子的结点
     */
   
        public boolean hasChildren(Object element) {
          
         return true;
        }

        /**
         * 取得某结点的父结点。极少需要实现此方法
         */
        public Object getParent(Object element) {
            return null;
        }

        /**
         * 当TreeViewer被销毁时将执行这个方法。极少需要实现此方法
         */
        public void dispose() {}

        /**
         * 当tv.setInput()发生变化时调用此方法。极少需要实现此方法
         */
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
    }

下面的类提供标签,如节点的名字,结点点的图标.

package com.gujin;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * 标签提供器。主要负责每一单个对象在TreeViewer中的显示(文字、图象)
 */
public class MyLableProvider implements ILabelProvider {

    /**
     * 显示什么图片
     * @param 结点
     * @return 可以为null值
     */
    public Image getImage(Object element) {
        //            ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
        //            return sharedImages.getImage(ISharedImages.IMG_OBJS_WARN_TSK);
        return null;
    }

    /**
     * 显示什么文字
     * @param 结点
     * @return 不能为null值
     */
    public String getText(Object element) {
        return (String) element;

    }

    public void addListener(ILabelProviderListener listener) {}

    public void dispose() {}

    public boolean isLabelProperty(Object element, String property) {
        return false;
    }

    public void removeListener(ILabelProviderListener listener) {}
}

/**
 * 标签提供器。如果你赚上面的MyLableProvider那些没用的方法碍眼,
 * Eclipse中有一个ILabelProvider的缺省实现LabelProvider,继承它也行
 */
//    private static final class MyLableProvider extends LabelProvider {
//        public String getText(Object element) {
//             return (String)element;
//        }
//    }

 

 

最后,显示treeViewer

package com.gujin;

import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class CreatTree {
  public static void open() {
         final Display display = new Display();
         final Shell shell = new Shell();
         shell.setLayout(new FillLayout());
         ui(shell);
         shell.open();
         while (!shell.isDisposed()) {
             if (!display.readAndDispatch())
                 display.sleep();
         }
     }

     private static void ui(Shell shell) {
         Composite c = new Composite(shell, SWT.NONE);
         c.setLayout(new FillLayout());
        
         TreeViewer tv=new TreeViewer(c,SWT.BORDER);
         tv.setContentProvider(new MyContentProvider());
         tv.setLabelProvider(new MyLableProvider());
         tv.setInput(new Object());//设置输入对象的方法与前面相同

     }
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值