Swt/Jface treeViewer的使用

来源:互联网 发布:icloud备份微信数据 编辑:程序博客网 时间:2024/05/10 06:59

http://www.cnblogs.com/huqingyu/archive/2008/04/10/1146209.html

转载,这篇文章帮了我很多忙


上边介绍了,tableviewer,这里介绍一下treeViewer,总的流程类似。

一、构造一个树形结构的数据出来,这里选择国家、城市、人来构造一个树形结构,代码如下:
1,定义一个接口

package model;

import java.util.List;

public interface Itree {
    
public String getName();
    
public void setName(String name);
    
public void setChildren(List Children);
    
public List getChildren();
}

2,国家

package model;

import java.util.ArrayList;
import java.util.List;

public class Country implements Itree{
    
private Long id;
    
private String name;
    
private List children = new ArrayList();
    
public Country(){
    }

    
public Country(String name){
        
this.name = name;
    }

    
public List getChildren() {
        
return children;
    }

    
public void setChildren(List children) {
        
this.children = children;
    }

    
public Long getId() {
        
return id;
    }

    
public void setId(Long id) {
        
this.id = id;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }

    
}


3,城市
package model;

import java.util.ArrayList;
import java.util.List;

public class City implements Itree{
    
private Long id;
    
private String name;
    
private List children = new ArrayList();
    
public City(){
    }

    
public City(String name){
        
this.name = name;
    }

    
public List getChildren() {
        
return children;
    }

    
public void setChildren(List children) {
        
this.children = children;
    }

    
public Long getId() {
        
return id;
    }

    
public void setId(Long id) {
        
this.id = id;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }

}


4,人
package model;

import java.util.ArrayList;
import java.util.List;

public class People implements Itree{
    
private Long id;
    
private String name;
    
public People(){
    }

    
public People(String name){
        
this.name = name;
    }

    
public List getChildren() {
        
return null;
    }

    
public void setChildren(List children) {
    }

    
public Long getId() {
        
return id;
    }

    
public void setId(Long id) {
        
this.id = id;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }

}


5,把这些元素组织起来
package model;

import java.util.ArrayList;
import java.util.List;

public class Factory {
    @SuppressWarnings(
"unchecked")
    
public static List createTree(){
        
//生成国家
        Country cn = new Country("中国");
        Country us 
= new Country("美国");
        Country jp 
= new Country("日本");
        
//生成城市
        City beijing  = new City("北京");
        City shanghai 
= new City("上海");
        City newyork 
= new City("纽约");
        City la 
= new City("洛杉矶");
        City tokyo 
= new City("东京");
        City osaka 
= new City("大阪");
        
//北京人
        ArrayList list = new ArrayList();
        list.add(
new People("张三"));
        list.add(
new People("李四"));
        list.add(
new People("王五"));
        beijing.setChildren(list);
        
//上海人
        list = new ArrayList();
        list.add(
new People("翠花"));
        list.add(
new People("小红"));
        list.add(
new People("小崔"));
        shanghai.setChildren(list);
        
//纽约人
        list = new ArrayList();
        list.add(
new People("tom"));
        list.add(
new People("rose"));
        list.add(
new People("john"));
        newyork.setChildren(list);
        
//洛杉矶人
        list = new ArrayList();
        list.add(
new People("Sofia"));
        list.add(
new People("sarah"));
        list.add(
new People("Jennifer"));
        la.setChildren(list);
        
//东京人
        list = new ArrayList();
        list.add(
new People("渡边"));
        list.add(
new People("鬼冢"));
        list.add(
new People("山本"));
        tokyo.setChildren(list);
        
//大阪人
        list = new ArrayList();
        list.add(
new People("奈奈子"));
        list.add(
new People("菜菜子"));
        list.add(
new People("新垣结衣"));
        osaka.setChildren(list);
        
        
//关联城市与国家
        
//中国
        ArrayList citys = new ArrayList();
        citys.add(beijing);
        citys.add(shanghai);
        cn.setChildren(citys);
        
//美国
        citys = new ArrayList();
        citys.add(newyork);
        citys.add(la);
        us.setChildren(citys);
        
//日本
        citys = new ArrayList();
        citys.add(tokyo);
        citys.add(osaka);
        jp.setChildren(citys);
        
//国家列表
        ArrayList countrys = new ArrayList();
        countrys.add(cn);
        countrys.add(us);
        countrys.add(jp);
        
return countrys;
    }

}


二、定义内容器和标签器
1,内容器
import java.util.List;

import model.Itree;

import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;

public class TreeContentProvider implements IStructuredContentProvider, ITreeContentProvider {
        
        
public Object[] getElements(Object inputElement) {
            
if (inputElement instanceof List){
                List input 
= (List)inputElement;
                
return input.toArray();
            }

            
return new Object[0];
        }

        
public Object[] getChildren(Object parentElement) {
            Itree node 
= (Itree)parentElement;
            List list 
= node.getChildren();
            
if(list == null){
                
return new Object[0];
            }

            
return list.toArray();
        }

        
        
public boolean hasChildren(Object element) {
            Itree node 
= (Itree)element;
            List list 
= node.getChildren();
            
return !(list == null || list.isEmpty());
        }

        
//以下三个函数根据需要填充
        public Object getParent(Object element) {
            
return null;
        }

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

        
public void dispose() {
        }

    }
2,标签器:
import model.Itree;

import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;

public class TreeLabelProvider extends LabelProvider implements ILabelProvider {
        
public String getText(Object element) {
            Itree node 
= (Itree)element;
            
return node.getName();
        }

        
public Image getImage(Object element) {
            
return null;
        }

    }
三、好了,准备工作做好了,把上边的内容利用起来就好了。
import model.Factory;

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


public class TestTreeViewer {
    
    
private static Tree tree;
    
public static void main(String[] args) {
        
final Display display = Display.getDefault();
        
final Shell shell = new Shell();
        shell.setSize(
500375);
        shell.setText(
"SWT Application");
        
//
        final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
        tree 
= treeViewer.getTree();
        tree.setBounds(
8375264185);
        
        treeViewer.setLabelProvider(
new TreeLabelProvider());
        treeViewer.setContentProvider(
new TreeContentProvider());
        treeViewer.setInput(Factory.createTree());
        
        shell.open();
        shell.setLayout(
new FillLayout());
        shell.layout();
        
while (!shell.isDisposed()) {
            
if (!display.readAndDispatch())
                display.sleep();
        }

    }


}


看看是不是已经实现了treeViewer
四、上边是简单的treeViewer,如果我们需要带checkbox的treeViewer,简单,只需要更改
final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
把TreeViewer换成CheckboxTreeViewer。这就是mvc的好处了。
但现实中我们多用ContainerCheckedTreeViewer代替CheckboxTreeViewer,因为这个提供了更多的功能。
CheckboxTreeViewer是TreeViewer的子类,  ContainerCheckedTreeViewer是CheckboxTreeViewer的子类,所以可以随便替换。
替换后:
final ContainerCheckedTreeViewer treeViewer = new ContainerCheckedTreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
五、treeviewer和tableviewer都介绍过了,考虑一下把两个结合起来是不是我们经常需要的情况。尝试一下吧。
六、souce下载:http://www.blogjava.net/Files/dreamstone/jface-6.rar
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果7卡机黑屏了怎么办 苹果7手机铃声小怎么办 支付宝发现套现怎么办 空调滴水管断了怎么办 地漏下水管断了怎么办 脸上长白色糠疹怎么办 腋下长白色的毛怎么办 饥荒电羊死光了怎么办 6s储存空间虚满怎么办 大胸下垂穿婚纱怎么办 美团签约成功后怎么办 拍婚纱照笑不出来怎么办 长得丑拍婚纱照怎么办 失恋了怎么办才能最快走出来 眼镜大了往下掉怎么办 眼镜带着往下掉怎么办 眼镜腿松了怎么办妙招 眼镜框大了总掉怎么办 吃不下饭恶心想吐怎么办 买到苹果翻新机怎么办 欠装修款不给怎么办 老板欠工资跑了怎么办 挖机老板欠工资怎么办 欠工程款耍赖不给怎么办 辞工后不给工资怎么办 工伤仲裁后不给怎么办 离职后不给工资怎么办 离职了不发工资怎么办 饭店欠工资不给怎么办 单位欠工资不给怎么办 离职后工资不发怎么办 暑假工不给工资怎么办 暑假工工资不发怎么办 个人欠钱2万不还怎么办 快递发错地址了怎么办 香烟被快递扣了怎么办 买st股票退市了怎么办 av淘宝看不了了,怎么办 厨房通水道堵了怎么办 皮鞋大了不跟脚怎么办 敞口皮鞋穿大了怎么办