`

Swt/Jface treeViewer的使用

 
阅读更多

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

packagemodel;

importjava.util.List;

publicinterfaceItree{
publicStringgetName();
publicvoidsetName(Stringname);
publicvoidsetChildren(ListChildren);
publicListgetChildren();
}

2,国家

packagemodel;

importjava.util.ArrayList;
importjava.util.List;

publicclassCountryimplementsItree{
privateLongid;
privateStringname;
privateListchildren=newArrayList();
publicCountry(){
}

publicCountry(Stringname){
this.name=name;
}

publicListgetChildren(){
returnchildren;
}

publicvoidsetChildren(Listchildren){
this.children=children;
}

publicLonggetId(){
returnid;
}

publicvoidsetId(Longid){
this.id=id;
}

publicStringgetName(){
returnname;
}

publicvoidsetName(Stringname){
this.name=name;
}


}


3,城市
packagemodel;

importjava.util.ArrayList;
importjava.util.List;

publicclassCityimplementsItree{
privateLongid;
privateStringname;
privateListchildren=newArrayList();
publicCity(){
}

publicCity(Stringname){
this.name=name;
}

publicListgetChildren(){
returnchildren;
}

publicvoidsetChildren(Listchildren){
this.children=children;
}

publicLonggetId(){
returnid;
}

publicvoidsetId(Longid){
this.id=id;
}

publicStringgetName(){
returnname;
}

publicvoidsetName(Stringname){
this.name=name;
}

}


4,人
packagemodel;

importjava.util.ArrayList;
importjava.util.List;

publicclassPeopleimplementsItree{
privateLongid;
privateStringname;
publicPeople(){
}

publicPeople(Stringname){
this.name=name;
}

publicListgetChildren(){
returnnull;
}

publicvoidsetChildren(Listchildren){
}

publicLonggetId(){
returnid;
}

publicvoidsetId(Longid){
this.id=id;
}

publicStringgetName(){
returnname;
}

publicvoidsetName(Stringname){
this.name=name;
}

}


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

importjava.util.ArrayList;
importjava.util.List;

publicclassFactory{
@SuppressWarnings(
"unchecked")
publicstaticListcreateTree(){
//生成国家
Countrycn=newCountry("中国");
Countryus
=newCountry("美国");
Countryjp
=newCountry("日本");
//生成城市
Citybeijing=newCity("北京");
Cityshanghai
=newCity("上海");
Citynewyork
=newCity("纽约");
Cityla
=newCity("洛杉矶");
Citytokyo
=newCity("东京");
Cityosaka
=newCity("大阪");
//北京人
ArrayListlist=newArrayList();
list.add(
newPeople("张三"));
list.add(
newPeople("李四"));
list.add(
newPeople("王五"));
beijing.setChildren(list);
//上海人
list=newArrayList();
list.add(
newPeople("翠花"));
list.add(
newPeople("小红"));
list.add(
newPeople("小崔"));
shanghai.setChildren(list);
//纽约人
list=newArrayList();
list.add(
newPeople("tom"));
list.add(
newPeople("rose"));
list.add(
newPeople("john"));
newyork.setChildren(list);
//洛杉矶人
list=newArrayList();
list.add(
newPeople("Sofia"));
list.add(
newPeople("sarah"));
list.add(
newPeople("Jennifer"));
la.setChildren(list);
//东京人
list=newArrayList();
list.add(
newPeople("渡边"));
list.add(
newPeople("鬼冢"));
list.add(
newPeople("山本"));
tokyo.setChildren(list);
//大阪人
list=newArrayList();
list.add(
newPeople("奈奈子"));
list.add(
newPeople("菜菜子"));
list.add(
newPeople("新垣结衣"));
osaka.setChildren(list);

//关联城市与国家
//中国
ArrayListcitys=newArrayList();
citys.add(beijing);
citys.add(shanghai);
cn.setChildren(citys);
//美国
citys=newArrayList();
citys.add(newyork);
citys.add(la);
us.setChildren(citys);
//日本
citys=newArrayList();
citys.add(tokyo);
citys.add(osaka);
jp.setChildren(citys);
//国家列表
ArrayListcountrys=newArrayList();
countrys.add(cn);
countrys.add(us);
countrys.add(jp);
returncountrys;
}

}


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

importmodel.Itree;

importorg.eclipse.jface.viewers.IStructuredContentProvider;
importorg.eclipse.jface.viewers.ITreeContentProvider;
importorg.eclipse.jface.viewers.Viewer;

publicclassTreeContentProviderimplementsIStructuredContentProvider,ITreeContentProvider{

publicObject[]getElements(ObjectinputElement){
if(inputElementinstanceofList){
Listinput
=(List)inputElement;
returninput.toArray();
}

returnnewObject[0];
}

publicObject[]getChildren(ObjectparentElement){
Itreenode
=(Itree)parentElement;
Listlist
=node.getChildren();
if(list==null){
returnnewObject[0];
}

returnlist.toArray();
}


publicbooleanhasChildren(Objectelement){
Itreenode
=(Itree)element;
Listlist
=node.getChildren();
return!(list==null||list.isEmpty());
}

//以下三个函数根据需要填充
publicObjectgetParent(Objectelement){
returnnull;
}

publicvoidinputChanged(Viewerviewer,ObjectoldInput,ObjectnewInput){
}

publicvoiddispose(){
}

}
2,标签器:
importmodel.Itree;

importorg.eclipse.jface.viewers.ILabelProvider;
importorg.eclipse.jface.viewers.LabelProvider;
importorg.eclipse.swt.graphics.Image;

publicclassTreeLabelProviderextendsLabelProviderimplementsILabelProvider{
publicStringgetText(Objectelement){
Itreenode
=(Itree)element;
returnnode.getName();
}

publicImagegetImage(Objectelement){
returnnull;
}

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

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


publicclassTestTreeViewer{

privatestaticTreetree;
publicstaticvoidmain(String[]args){
finalDisplaydisplay=Display.getDefault();
finalShellshell=newShell();
shell.setSize(
500,375);
shell.setText(
"SWTApplication");
//
finalTreeViewertreeViewer=newTreeViewer(shell,SWT.BORDER|SWT.H_SCROLL);
tree
=treeViewer.getTree();
tree.setBounds(
83,75,264,185);

treeViewer.setLabelProvider(
newTreeLabelProvider());
treeViewer.setContentProvider(
newTreeContentProvider());
treeViewer.setInput(Factory.createTree());

shell.open();
shell.setLayout(
newFillLayout());
shell.layout();
while(!shell.isDisposed()){
if(!display.readAndDispatch())
display.sleep();
}

}


}


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

相关推荐

Global site tag (gtag.js) - Google Analytics