您的位置:首页 > 其它

Swt/Jface treeViewer的使用

2013-04-07 13:08 465 查看
/article/4602326.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(500, 375);


shell.setText("SWT Application");


//


final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);


tree = treeViewer.getTree();


tree.setBounds(83, 75, 264, 185);




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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: