Swt/Jface treeViewer的使用

时间:2022-11-11 16:11:56

 

上边介绍了,tableviewer,这里介绍一下treeViewer,总的流程类似。
一、构造一个树形结构的数据出来,这里选择国家、城市、人来构造一个树形结构,代码如下:
1,定义一个接口

Swt/Jface treeViewer的使用package  model;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用
import  java.util.List;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用
public   interface  Itree  {
Swt/Jface treeViewer的使用    
public String getName();
Swt/Jface treeViewer的使用    
public void setName(String name);
Swt/Jface treeViewer的使用    
public void setChildren(List Children);
Swt/Jface treeViewer的使用    
public List getChildren();
Swt/Jface treeViewer的使用}

Swt/Jface treeViewer的使用

2,国家

Swt/Jface treeViewer的使用package  model;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用
import  java.util.ArrayList;
Swt/Jface treeViewer的使用
import  java.util.List;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用
public   class  Country  implements  Itree {
Swt/Jface treeViewer的使用    
private Long id;
Swt/Jface treeViewer的使用    
private String name;
Swt/Jface treeViewer的使用    
private List children = new ArrayList();
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public Country(){
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public Country(String name){
Swt/Jface treeViewer的使用        
this.name = name;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public List getChildren() {
Swt/Jface treeViewer的使用        
return children;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public void setChildren(List children) {
Swt/Jface treeViewer的使用        
this.children = children;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public Long getId() {
Swt/Jface treeViewer的使用        
return id;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public void setId(Long id) {
Swt/Jface treeViewer的使用        
this.id = id;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public String getName() {
Swt/Jface treeViewer的使用        
return name;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public void setName(String name) {
Swt/Jface treeViewer的使用        
this.name = name;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用    
Swt/Jface treeViewer的使用}

Swt/Jface treeViewer的使用

3,城市
Swt/Jface treeViewer的使用package  model;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用
import  java.util.ArrayList;
Swt/Jface treeViewer的使用
import  java.util.List;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用
public   class  City  implements  Itree {
Swt/Jface treeViewer的使用    
private Long id;
Swt/Jface treeViewer的使用    
private String name;
Swt/Jface treeViewer的使用    
private List children = new ArrayList();
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public City(){
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public City(String name){
Swt/Jface treeViewer的使用        
this.name = name;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public List getChildren() {
Swt/Jface treeViewer的使用        
return children;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public void setChildren(List children) {
Swt/Jface treeViewer的使用        
this.children = children;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public Long getId() {
Swt/Jface treeViewer的使用        
return id;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public void setId(Long id) {
Swt/Jface treeViewer的使用        
this.id = id;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public String getName() {
Swt/Jface treeViewer的使用        
return name;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public void setName(String name) {
Swt/Jface treeViewer的使用        
this.name = name;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用}

Swt/Jface treeViewer的使用

4,人
Swt/Jface treeViewer的使用package  model;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用
import  java.util.ArrayList;
Swt/Jface treeViewer的使用
import  java.util.List;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用
public   class  People  implements  Itree {
Swt/Jface treeViewer的使用    
private Long id;
Swt/Jface treeViewer的使用    
private String name;
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public People(){
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public People(String name){
Swt/Jface treeViewer的使用        
this.name = name;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public List getChildren() {
Swt/Jface treeViewer的使用        
return null;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public void setChildren(List children) {
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public Long getId() {
Swt/Jface treeViewer的使用        
return id;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public void setId(Long id) {
Swt/Jface treeViewer的使用        
this.id = id;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public String getName() {
Swt/Jface treeViewer的使用        
return name;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public void setName(String name) {
Swt/Jface treeViewer的使用        
this.name = name;
Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用}

Swt/Jface treeViewer的使用

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

Swt/Jface treeViewer的使用}

Swt/Jface treeViewer的使用

二、定义内容器和标签器
1,内容器
Swt/Jface treeViewer的使用import  java.util.List;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用
import  model.Itree;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用
import  org.eclipse.jface.viewers.IStructuredContentProvider;
Swt/Jface treeViewer的使用
import  org.eclipse.jface.viewers.ITreeContentProvider;
Swt/Jface treeViewer的使用
import  org.eclipse.jface.viewers.Viewer;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用
public   class  TreeContentProvider  implements  IStructuredContentProvider, ITreeContentProvider  {
Swt/Jface treeViewer的使用        
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用        
public Object[] getElements(Object inputElement) {
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用            
if (inputElement instanceof List){
Swt/Jface treeViewer的使用                List input 
= (List)inputElement;
Swt/Jface treeViewer的使用                
return input.toArray();
Swt/Jface treeViewer的使用            }

Swt/Jface treeViewer的使用            
return new Object[0];
Swt/Jface treeViewer的使用        }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用        
public Object[] getChildren(Object parentElement) {
Swt/Jface treeViewer的使用            Itree node 
= (Itree)parentElement;
Swt/Jface treeViewer的使用            List list 
= node.getChildren();
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用            
if(list == null){
Swt/Jface treeViewer的使用                
return new Object[0];
Swt/Jface treeViewer的使用            }

Swt/Jface treeViewer的使用            
return list.toArray();
Swt/Jface treeViewer的使用        }

Swt/Jface treeViewer的使用        
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用        
public boolean hasChildren(Object element) {
Swt/Jface treeViewer的使用            Itree node 
= (Itree)element;
Swt/Jface treeViewer的使用            List list 
= node.getChildren();
Swt/Jface treeViewer的使用            
return !(list == null || list.isEmpty());
Swt/Jface treeViewer的使用        }

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

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用        
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
Swt/Jface treeViewer的使用        }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用        
public void dispose() {
Swt/Jface treeViewer的使用        }

Swt/Jface treeViewer的使用    }
2,标签器:
Swt/Jface treeViewer的使用import  model.Itree;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用
import  org.eclipse.jface.viewers.ILabelProvider;
Swt/Jface treeViewer的使用
import  org.eclipse.jface.viewers.LabelProvider;
Swt/Jface treeViewer的使用
import  org.eclipse.swt.graphics.Image;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用
public   class  TreeLabelProvider  extends  LabelProvider  implements  ILabelProvider  {
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用        
public String getText(Object element) {
Swt/Jface treeViewer的使用            Itree node 
= (Itree)element;
Swt/Jface treeViewer的使用            
return node.getName();
Swt/Jface treeViewer的使用        }

Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用        
public Image getImage(Object element) {
Swt/Jface treeViewer的使用            
return null;
Swt/Jface treeViewer的使用        }

Swt/Jface treeViewer的使用    }
三、好了,准备工作做好了,把上边的内容利用起来就好了。
Swt/Jface treeViewer的使用import  model.Factory;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用
import  org.eclipse.jface.viewers.TreeViewer;
Swt/Jface treeViewer的使用
import  org.eclipse.swt.SWT;
Swt/Jface treeViewer的使用
import  org.eclipse.swt.layout.FillLayout;
Swt/Jface treeViewer的使用
import  org.eclipse.swt.widgets.Display;
Swt/Jface treeViewer的使用
import  org.eclipse.swt.widgets.Shell;
Swt/Jface treeViewer的使用
import  org.eclipse.swt.widgets.Tree;
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用
public   class  TestTreeViewer  {
Swt/Jface treeViewer的使用    
Swt/Jface treeViewer的使用    
private static Tree tree;
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用    
public static void main(String[] args) {
Swt/Jface treeViewer的使用        
final Display display = Display.getDefault();
Swt/Jface treeViewer的使用        
final Shell shell = new Shell();
Swt/Jface treeViewer的使用        shell.setSize(
500375);
Swt/Jface treeViewer的使用        shell.setText(
"SWT Application");
Swt/Jface treeViewer的使用        
//
Swt/Jface treeViewer的使用
        final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
Swt/Jface treeViewer的使用        tree 
= treeViewer.getTree();
Swt/Jface treeViewer的使用        tree.setBounds(
8375264185);
Swt/Jface treeViewer的使用        
Swt/Jface treeViewer的使用        treeViewer.setLabelProvider(
new TreeLabelProvider());
Swt/Jface treeViewer的使用        treeViewer.setContentProvider(
new TreeContentProvider());
Swt/Jface treeViewer的使用        treeViewer.setInput(Factory.createTree());
Swt/Jface treeViewer的使用        
Swt/Jface treeViewer的使用        shell.open();
Swt/Jface treeViewer的使用        shell.setLayout(
new FillLayout());
Swt/Jface treeViewer的使用        shell.layout();
Swt/Jface treeViewer的使用Swt/Jface treeViewer的使用        
while (!shell.isDisposed()) {
Swt/Jface treeViewer的使用            
if (!display.readAndDispatch())
Swt/Jface treeViewer的使用                display.sleep();
Swt/Jface treeViewer的使用        }

Swt/Jface treeViewer的使用    }

Swt/Jface treeViewer的使用
Swt/Jface treeViewer的使用}

Swt/Jface treeViewer的使用

看看是不是已经实现了treeViewer
四、上边是简单的treeViewer,如果我们需要带checkbox的treeViewer,简单,只需要更改
Swt/Jface treeViewer的使用final  TreeViewer treeViewer  =   new  TreeViewer(shell, SWT.BORDER | SWT.H_SCROLL);
Swt/Jface treeViewer的使用
把TreeViewer换成CheckboxTreeViewer。这就是mvc的好处了。
但现实中我们多用ContainerCheckedTreeViewer代替CheckboxTreeViewer,因为这个提供了更多的功能。
CheckboxTreeViewer是TreeViewer的子类,  ContainerCheckedTreeViewer是CheckboxTreeViewer的子类,所以可以随便替换。
替换后:
Swt/Jface treeViewer的使用final  ContainerCheckedTreeViewer treeViewer  =   new  ContainerCheckedTreeViewer(shell, SWT.BORDER | SWT.H_SCROLL);
五、treeviewer和tableviewer都介绍过了,考虑一下把两个结合起来是不是我们经常需要的情况。尝试一下吧。
六、souce下载: http://www.blogjava.net/Files/dreamstone/jface-6.rar