第一步:搭建TreeViewer结构
1.创建TreeViewer对象, TreeViewer tv=new TreeViewer(composite);
2.设置内容管理标签:
tv.setLabelProvider(new TreeViewerLabelProvider());
tv.setContentProvider(new TreeViewerContentProvider());
tv.setCellModifier(new TreeViewerCellModifier());
TreeViewerLabelProvider 该标签是用来显示节点的相关信息,包括显示内容和图标。
重写getImage()方法可以得到节点图标;
例如:
class TreeViewerLabelProvider extends LabelProvider implements ITableLabelProvider,ITableColorProvider{
@Override
public Image getColumnImage(Object element, int col){ //Object 是节点,col是列数---例如第一列就是1,以此类推
TreeEntry entry=(TreeEntry)element;
switch(col){
case 0:return TCTypeRenderer.getImage(entry.bopline.getTtemRevision()) ;
}
}
}
这里 TreeEntry 是自己针对实际情况创建的类;
TCTypeRenderer是TC的图片库,还有很多得到图片的方法,参数都有很多种。传入版本或传入类型名称。
TreeViewerContentProvider是提供树节点显示的内容
1. getElements
此函数定义为“public Object[] getElements(Object inputElement);”,当程序开始构建树
时,首先调用getElements 返回一个对象的数组,此数组对象表示当前树的根节点,inputElement
参数为TreeViewer 的输入(setInput 的输入数据)。
2. hasChildren
此函数定义为“public boolean hasChildren(Object element);”,当TreeViewer 显示一个节
点后,会调用hasChildren 函数判断当前节点是否有子节点,如果有子节点则显示“+”,element
参数为要判断是否有子节点的节点。
3. getChildren
此函数定义为“public Object[] getChildren(Object parentElement);”,当用户选择节点打
开子节点时,会调用getChildren 函数返回下一层子节点,parentElement 参数为选择的节点。
4. getParent
此函数定义为“public Object getParent(Object element);”,可以通过此方法返回element
的父节点。
class TreeViewerContentProvider implements ITreeContentProvider {
public Object[] getChildren(Object arg0) {
//返回树的下一级节点
return ((File) arg0).listFiles();
}
public Object getParent(Object arg0) {
//返回树的上一级节点
return ((File) arg0).getParentFile();
}
public boolean hasChildren(Object arg0) {
Object[] obj = getChildren(arg0);
//判断树是否有下一级节点,true 为在节点显示"+"信息
return obj == null ? false : obj.length > 0;
}
public Object[] getElements(Object arg0) {
//打印出树的输入信息,通常用户可以通过输入信息构建树
System.out.println(arg0);
// File.listRoots()作为树的根节点
return File.listRoots();
}