先看一下效果图:

代码结构是这样的:

好的,现在看一下代码:

package model;

import java.util.List;

public interface ITree {
public String getName();
public void setName(String name);
public List getChildren();
public void setChildren(List children);
}

首先定义接口。再实现两个类。

package model;

import java.util.ArrayList;
import java.util.List; public class Country implements ITree{
private String name;
private List children=new ArrayList();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Member> getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
} }
package model;

import java.util.List;

public class Member implements ITree{
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public List getChildren() {
// TODO Auto-generated method stub
return null;
} @Override
public void setChildren(List children) {
// TODO Auto-generated method stub } }

以List的形式组织树形结构:

package model;

import java.util.ArrayList;
import java.util.List; public class Factory {
public static List createTree(){ Country mouseCountry=new Country();
mouseCountry.setName("鼠球王国");
Country dogCountry=new Country();
dogCountry.setName("狗狗王国"); Member mouseBuble=new Member();
mouseBuble.setName("小鼠球");
Member mouseGray=new Member();
mouseGray.setName("小灰鼠");
ArrayList list=new ArrayList();
list.add(mouseBuble);
list.add(mouseGray);
mouseCountry.setChildren(list); Member dogBu=new Member();
dogBu.setName("布布狗");
Member dogBrick=new Member();
dogBrick.setName("专狗");
list=new ArrayList();
list.add(dogBrick);
list.add(dogBu);
dogCountry.setChildren(list); ArrayList countryList=new ArrayList();
countryList.add(mouseCountry);
countryList.add(dogCountry);
return countryList; }
}

实现他的两个Provider:

package com.test;

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{ @Override
public void dispose() {
// TODO Auto-generated method stub } @Override
public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
// TODO Auto-generated method stub } @Override
public Object[] getChildren(Object arg0) {
// TODO Auto-generated method stub
ITree tree=(ITree)arg0;
List list=tree.getChildren();
if(list!=null){
return list.toArray();
}
return new Object[0];
} @Override
public Object getParent(Object arg0) {
// TODO Auto-generated method stub
return null;
} @Override
public boolean hasChildren(Object element) {
// TODO Auto-generated method stub
ITree tree=(ITree)element;
List list=tree.getChildren(); return !(list==null || list.isEmpty());
} @Override
public Object[] getElements(Object arg0) {
// TODO Auto-generated method stub
if(arg0 instanceof List){
List list=(List)arg0;
return list.toArray();
}
return new Object[0];
} }
package com.test;

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;
}
}

最后是总的,将他们联系在一起:

package com.test;

import model.Factory;

import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell; public class LBMShow { public static void main(String[] args) {
final Display display=Display.getDefault();
final Shell shell=new Shell();
shell.setSize(500,500);
shell.setText("TreeTable"); final TreeViewer treeViewer=new TreeViewer(shell, SWT.BORDER | SWT.SCROLL_PAGE); treeViewer.setContentProvider(new TreeContentProvider());
treeViewer.setLabelProvider(new TreeLabelProvider());
treeViewer.setInput(Factory.createTree()); //这里可以将List的结构以树形结构显示出来。 shell.pack();
shell.open();
shell.setLayout(new FillLayout()); //没这句话竟然出不来效果!
shell.layout(); while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} }

//******************************************************************************************************************************

需要注意的是,要添加如下的包:

SWT的TreeVierer的使用的更多相关文章

  1. eclipse里打开SWT项目找不到source/design的图形UI设计界面

    因为前天重新装了个新版的eclipse, 结果今天打开一个SWT的项目,突然找不到source/design的图形UI设计的两个切换按钮 我把SWT组件重新装了还是找不到.结果后来发现是因为重装ecl ...

  2. eclipse Swt编程—窗口小部件widget

    1.标签Label // 标签(Label类)组件是SWT中最简单的组件.Label类的构造方法和格式如下: // Label(Composite parent,

  3. Eclipse swt开发环境搭建

    原料: eclipse swt.下载链接为: Eclipse 4.6.2 Release Build: 4.6.2 配置说明: Developing SWT applications using Ec ...

  4. 使SWT/JFace支持跨平台

    由于SWT的实现机制,在不同平台下,必须引用不同swt*.jar. 由于这个瓶颈,我们要为不同的平台编译不同的版本.但是这是可以避免的.这将是本文要讨论的内容. 我一共google到了3种soluti ...

  5. 使Docker Container支持运行SWT程序

    1, 下载安装JDK的docker container 我是从这个源下载已经做好的JDK8的container: https://registry.hub.docker.com/u/dockerfil ...

  6. org.eclipse.swt.custom.StyledText.getScrollbarsMode()I

    错误: org.eclipse.swt.custom.StyledText.getScrollbarsMode()I 解决方法: 1 卸载,并手工清除myeclipse全部文件 2 重新安装myecl ...

  7. swt controls里的控件list

    swt controls里的控件list,怎么显示滚动条,并且滚动条自动移动到最下边时,显示最新内容 package com.jokul; import org.eclipse.swt.widgets ...

  8. SWT布局管理器

    一.充满式布局管理器(FillLayout类) FillLayout类是最简单的布局类,它把组件摆放成一行或者一列,并强制组件大小一致.一般,组件的高度与最高的组件一致,宽度与最宽的组件相同.,它里面 ...

  9. SWT组件添加事件的四种方式

    在我们CS日常开发过程中会经常去为组件添加事件,我们常用的为AWT与SWT.SWT的事件模型是和标准的AWT基本一样的.下面将按照事件的四种写法来实现它. 一.匿名内部类的写法 new MouseAd ...

随机推荐

  1. 终于懂了:TWinControl.DefaultHandler里的CallWindowProc(FDefWndProc)还挺有深意的,TButton对WM_PAINT消息的处理就是靠它来处理的(以前不明白为什么总是要调用inherited,其实就是没有明白TWinControl.DefaultHandler的真正用处)

    我忽然发现:TButton既没有处理WM_PAINT,又没有Paint()或者PaintWindow(),那么它是什么时候被绘制的? Form1上放2个TButton,然后设置代码: procedur ...

  2. DELPHI XE7 新的并行库

    DELPHI XE7 的新功能列表里面增加了并行库System.Threading, System.SyncObjs. 为什么要增加新的并行库? 还是为了跨平台.以前要并行编程只能从TThread类继 ...

  3. Linux系统基础命令

    这是看itercast的学习笔记 Linux系统基础命令 日期时间 命令date用以查看.设置当前系统时间:格式化显示时间: +%Y--%m--%d 命令hwclock(clock)用以显示硬件时钟时 ...

  4. C语言字符串操作函数

    1.函数名: stpcpy  功  能: 拷贝一个字符串到另一个  用  法: char *stpcpy(char *destin, char *source);  程序例: #include < ...

  5. 【改了一天的拓扑排序】POJ 1094——Sorting It All Out

    来源:点击打开链接 不知道怎么回事,wa了整整一天..在绝望的时候AC了. 重点是分步处理和三种情况的判断. 1.判断是否成环,成环了直接输出错误信息. 2.然后一条边一条边的加入,进行拓扑排序,如果 ...

  6. 设计模式 - 装饰者模式(Decorator Pattern) Java的IO类 用法

    装饰者模式(Decorator Pattern) Java的IO类 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26716 ...

  7. Swift - 解析JSON数据(内置NSJSONSerialization与第三方JSONKit)

    一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SDK自带的JSON解决方案NSJSONSerialization,这是一个非常好用的JSON生成和解析工具,效率也比其 ...

  8. 与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密

    原文:与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密 [索引页][源码下载] 与众不同 wi ...

  9. Java编码浅析(注意区分三个概念)(转)

    编码: (1)外部资源的字符集-----没有读入jvm中的数据都是外部资源 (2)jvm中数据的字符集-----都是unicode (1)和(2)之间发生交互时,如果不指定编码,则使用JVM平台默认字 ...

  10. 最短路知识点总结(Dijkstra,Floyd,SPFA,Bellman-Ford)

    Dijkstra算法: 解决的问题: 带权重的有向图上单源最短路径问题.且权重都为非负值.如果采用的实现方法合适,Dijkstra运行时间要低于Bellman-Ford算法. 思路: 如果存在一条从i ...