Swt/Jface treeViewer的使用
2013-04-07 13:08
465 查看
/article/4602326.html
转载,这篇文章帮了我很多忙
上边介绍了,tableviewer,这里介绍一下treeViewer,总的流程类似。
一、构造一个树形结构的数据出来,这里选择国家、城市、人来构造一个树形结构,代码如下:
1,定义一个接口
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package model;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public interface Itree {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public String getName();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void setName(String name);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void setChildren(List Children);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public List getChildren();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
2,国家
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package model;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.ArrayList;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class Country implements Itree{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Long id;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String name;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private List children = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Country(){
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Country(String name){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List getChildren() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return children;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setChildren(List children) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.children = children;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Long getId() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setId(Long id) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.id = id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getName() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setName(String name) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
3,城市
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package model;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.ArrayList;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class City implements Itree{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Long id;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String name;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private List children = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public City(){
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public City(String name){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List getChildren() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return children;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setChildren(List children) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.children = children;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Long getId() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setId(Long id) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.id = id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getName() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setName(String name) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
4,人
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package model;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.ArrayList;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class People implements Itree{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Long id;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public People(){
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public People(String name){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List getChildren() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return null;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setChildren(List children) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Long getId() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setId(Long id) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.id = id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getName() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setName(String name) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
5,把这些元素组织起来
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package model;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.ArrayList;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class Factory {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
@SuppressWarnings("unchecked")
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static List createTree(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//生成国家
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Country cn = new Country("中国");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Country us = new Country("美国");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Country jp = new Country("日本");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//生成城市
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City beijing = new City("北京");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City shanghai = new City("上海");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City newyork = new City("纽约");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City la = new City("洛杉矶");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City tokyo = new City("东京");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City osaka = new City("大阪");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//北京人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
ArrayList list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("张三"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("李四"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("王五"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
beijing.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//上海人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("翠花"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("小红"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("小崔"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shanghai.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//纽约人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("tom"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("rose"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("john"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
newyork.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//洛杉矶人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("Sofia"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("sarah"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("Jennifer"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
la.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//东京人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("渡边"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("鬼冢"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("山本"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tokyo.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//大阪人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("奈奈子"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("菜菜子"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("新垣结衣"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
osaka.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//关联城市与国家
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//中国
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
ArrayList citys = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(beijing);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(shanghai);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
cn.setChildren(citys);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//美国
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(newyork);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(la);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
us.setChildren(citys);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//日本
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(tokyo);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(osaka);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
jp.setChildren(citys);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//国家列表
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
ArrayList countrys = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
countrys.add(cn);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
countrys.add(us);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
countrys.add(jp);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return countrys;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
二、定义内容器和标签器
1,内容器
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import model.Itree;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.IStructuredContentProvider;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.ITreeContentProvider;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.Viewer;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class TreeContentProvider implements IStructuredContentProvider, ITreeContentProvider {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Object[] getElements(Object inputElement) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (inputElement instanceof List){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
List input = (List)inputElement;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return input.toArray();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return new Object[0];
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Object[] getChildren(Object parentElement) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Itree node = (Itree)parentElement;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
List list = node.getChildren();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(list == null){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return new Object[0];
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return list.toArray();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public boolean hasChildren(Object element) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Itree node = (Itree)element;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
List list = node.getChildren();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return !(list == null || list.isEmpty());
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//以下三个函数根据需要填充
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Object getParent(Object element) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return null;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void dispose() {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
2,标签器:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import model.Itree;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.ILabelProvider;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.LabelProvider;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.graphics.Image;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class TreeLabelProvider extends LabelProvider implements ILabelProvider {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getText(Object element) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Itree node = (Itree)element;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return node.getName();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Image getImage(Object element) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return null;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
三、好了,准备工作做好了,把上边的内容利用起来就好了。
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import model.Factory;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.TreeViewer;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.SWT;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.layout.FillLayout;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.widgets.Display;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.widgets.Shell;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.widgets.Tree;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class TestTreeViewer {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private static Tree tree;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[] args) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
final Display display = Display.getDefault();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
final Shell shell = new Shell();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shell.setSize(500, 375);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shell.setText("SWT Application");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tree = treeViewer.getTree();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tree.setBounds(83, 75, 264, 185);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
treeViewer.setLabelProvider(new TreeLabelProvider());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
treeViewer.setContentProvider(new TreeContentProvider());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
treeViewer.setInput(Factory.createTree());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shell.open();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shell.setLayout(new FillLayout());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shell.layout();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while (!shell.isDisposed()) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (!display.readAndDispatch())
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
display.sleep();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
看看是不是已经实现了treeViewer
四、上边是简单的treeViewer,如果我们需要带checkbox的treeViewer,简单,只需要更改
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
把TreeViewer换成CheckboxTreeViewer。这就是mvc的好处了。
但现实中我们多用ContainerCheckedTreeViewer代替CheckboxTreeViewer,因为这个提供了更多的功能。
CheckboxTreeViewer是TreeViewer的子类, ContainerCheckedTreeViewer是CheckboxTreeViewer的子类,所以可以随便替换。
替换后:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
final ContainerCheckedTreeViewer treeViewer = new ContainerCheckedTreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
五、treeviewer和tableviewer都介绍过了,考虑一下把两个结合起来是不是我们经常需要的情况。尝试一下吧。
六、souce下载:http://www.blogjava.net/Files/dreamstone/jface-6.rar
转载,这篇文章帮了我很多忙
上边介绍了,tableviewer,这里介绍一下treeViewer,总的流程类似。
一、构造一个树形结构的数据出来,这里选择国家、城市、人来构造一个树形结构,代码如下:
1,定义一个接口
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package model;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public interface Itree {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public String getName();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void setName(String name);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void setChildren(List Children);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public List getChildren();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
2,国家
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package model;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.ArrayList;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class Country implements Itree{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Long id;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String name;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private List children = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Country(){
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Country(String name){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List getChildren() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return children;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setChildren(List children) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.children = children;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Long getId() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setId(Long id) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.id = id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getName() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setName(String name) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
3,城市
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package model;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.ArrayList;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class City implements Itree{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Long id;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String name;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private List children = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public City(){
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public City(String name){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List getChildren() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return children;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setChildren(List children) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.children = children;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Long getId() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setId(Long id) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.id = id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getName() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setName(String name) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
4,人
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package model;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.ArrayList;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class People implements Itree{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Long id;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public People(){
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public People(String name){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List getChildren() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return null;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setChildren(List children) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Long getId() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setId(Long id) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.id = id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getName() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setName(String name) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
5,把这些元素组织起来
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package model;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.ArrayList;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class Factory {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
@SuppressWarnings("unchecked")
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static List createTree(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//生成国家
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Country cn = new Country("中国");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Country us = new Country("美国");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Country jp = new Country("日本");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//生成城市
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City beijing = new City("北京");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City shanghai = new City("上海");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City newyork = new City("纽约");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City la = new City("洛杉矶");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City tokyo = new City("东京");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
City osaka = new City("大阪");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//北京人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
ArrayList list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("张三"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("李四"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("王五"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
beijing.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//上海人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("翠花"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("小红"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("小崔"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shanghai.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//纽约人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("tom"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("rose"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("john"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
newyork.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//洛杉矶人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("Sofia"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("sarah"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("Jennifer"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
la.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//东京人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("渡边"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("鬼冢"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("山本"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tokyo.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//大阪人
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("奈奈子"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("菜菜子"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
list.add(new People("新垣结衣"));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
osaka.setChildren(list);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//关联城市与国家
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//中国
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
ArrayList citys = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(beijing);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(shanghai);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
cn.setChildren(citys);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//美国
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(newyork);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(la);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
us.setChildren(citys);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//日本
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(tokyo);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
citys.add(osaka);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
jp.setChildren(citys);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//国家列表
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
ArrayList countrys = new ArrayList();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
countrys.add(cn);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
countrys.add(us);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
countrys.add(jp);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return countrys;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
二、定义内容器和标签器
1,内容器
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import model.Itree;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.IStructuredContentProvider;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.ITreeContentProvider;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.Viewer;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class TreeContentProvider implements IStructuredContentProvider, ITreeContentProvider {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Object[] getElements(Object inputElement) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (inputElement instanceof List){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
List input = (List)inputElement;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return input.toArray();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return new Object[0];
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Object[] getChildren(Object parentElement) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Itree node = (Itree)parentElement;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
List list = node.getChildren();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(list == null){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return new Object[0];
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return list.toArray();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public boolean hasChildren(Object element) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Itree node = (Itree)element;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
List list = node.getChildren();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return !(list == null || list.isEmpty());
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//以下三个函数根据需要填充
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Object getParent(Object element) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return null;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void dispose() {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
2,标签器:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import model.Itree;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.ILabelProvider;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.LabelProvider;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.graphics.Image;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class TreeLabelProvider extends LabelProvider implements ILabelProvider {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getText(Object element) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Itree node = (Itree)element;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return node.getName();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Image getImage(Object element) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return null;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
三、好了,准备工作做好了,把上边的内容利用起来就好了。
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import model.Factory;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.jface.viewers.TreeViewer;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.SWT;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.layout.FillLayout;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.widgets.Display;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.widgets.Shell;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.eclipse.swt.widgets.Tree;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class TestTreeViewer {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private static Tree tree;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[] args) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
final Display display = Display.getDefault();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
final Shell shell = new Shell();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shell.setSize(500, 375);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shell.setText("SWT Application");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tree = treeViewer.getTree();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tree.setBounds(83, 75, 264, 185);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
treeViewer.setLabelProvider(new TreeLabelProvider());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
treeViewer.setContentProvider(new TreeContentProvider());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
treeViewer.setInput(Factory.createTree());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shell.open();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shell.setLayout(new FillLayout());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
shell.layout();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while (!shell.isDisposed()) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (!display.readAndDispatch())
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
display.sleep();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
看看是不是已经实现了treeViewer
四、上边是简单的treeViewer,如果我们需要带checkbox的treeViewer,简单,只需要更改
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
把TreeViewer换成CheckboxTreeViewer。这就是mvc的好处了。
但现实中我们多用ContainerCheckedTreeViewer代替CheckboxTreeViewer,因为这个提供了更多的功能。
CheckboxTreeViewer是TreeViewer的子类, ContainerCheckedTreeViewer是CheckboxTreeViewer的子类,所以可以随便替换。
替换后:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
final ContainerCheckedTreeViewer treeViewer = new ContainerCheckedTreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
五、treeviewer和tableviewer都介绍过了,考虑一下把两个结合起来是不是我们经常需要的情况。尝试一下吧。
六、souce下载:http://www.blogjava.net/Files/dreamstone/jface-6.rar
相关文章推荐
- Swt/Jface treeViewer的使用
- Swt/Jface treeViewer的使用
- Swt/Jface treeViewer的使用
- Swt/Jface treeViewer的使用
- Swt/Jface treeViewer的使用
- SWT(JFace)体验之TreeViewer
- JFace checkboxTreeViewer 使用记录
- SWT/Jface TreeViewer例子-实现文件浏览器
- SWT/Jface TreeViewer 获取展开节点元素集合
- SWT/Jface TreeViewer 上移和下移按钮的简单实现
- JFace TreeViewer使用
- SWT/Jface treeviewer 拖拽样式
- SWT/Jface TreeViewer 如何刷新后,展开原来的节点
- JFace TreeViewer使用
- JFace TreeViewer使用
- SWT/Jface TreeViewer、Tree如何实现双击事件
- Swt Jface TreeViewer Selection
- swt jface tree treeviewer
- JFace TreeViewer使用 及内容提供器(IStructuredContentProvider)
- JFace包下的TableViewer的使用