`
AquariusM
  • 浏览: 146485 次
  • 性别: Icon_minigender_1
  • 来自: 南阳
社区版块
存档分类
最新评论

Swt/Jface treeViewer的使用 (转载)

 
阅读更多

转载自:http://www.cnblogs.com/huqingyu/archive/2008/04/10/1146209.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 ,如果我们需要带checkboxtreeViewer ,简单,只需要更改

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

 

TreeViewer 换成CheckboxTreeViewer 。这就是mvc 的好处了。
但现实中我们多用ContainerCheckedTreeViewer 代替CheckboxTreeViewer ,因为这个提供了更多的功能。
CheckboxTreeViewer
TreeViewer 的子类,  ContainerCheckedTreeViewerCheckboxTreeViewer 的子类,所以可以随便替换。
替换后:

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

五、treeviewertableviewer 都介绍过了,考虑一下把两个结合起来是不是我们经常需要的情况。尝试一下吧。
六、souce 下载:http://www.blogjava.net/Files/dreamstone/jface-6.rar

分享到:
评论

相关推荐

    SWT/JFace专题 --- SWT/JFace概述

    9. SWT和JFace的API使用:通过Swt_Jface+API.chm这个帮助文档,可以详细了解每个类和方法的功能和用法。 学习SWT和JFace,开发者不仅可以创建出高性能、美观的Java GUI应用,还能充分利用Eclipse的生态系统,如插件...

    SWT/Jface API 3.4

    SWT (Standard Widget Toolkit) 和 JFace 是两个用于构建 Java 应用程序的图形用户界面(GUI)的库,它们都是由 Eclipse 开源项目提供的。SWT 是一个直接与操作系统进行交互的底层库,提供了丰富的控件和组件,而 ...

    eclipse swt/jface核心应用源码

    5. 表格和树的模型(Table and Tree Models):SWT和JFace提供了处理表格和树数据的类,如`TableViewer`和`TreeViewer`,它们支持数据的过滤、排序和分页。 6. 事件处理(Event Handling):SWT和JFace使用监听器...

    SWT/JFace从入门到精通

    - 探索JFace:了解JFace如何简化SWT的使用,如利用TreeViewer和TableViewer展示数据。 - 练习MVC:通过创建一个简单的数据编辑视图,实践JFace的MVC模式。 - 扩展Eclipse:学习如何创建Eclipse插件,将SWT/JFace...

    SWT/JFACE API

    SWT (Standard Widget Toolkit) 和 JFace 是两个用于构建Java图形用户界面(GUI)的开源库,它们在Java开发领域中被广泛使用,特别是在Eclipse IDE及其插件开发中。SWT是底层的UI库,提供了与操作系统原生控件直接...

    swt/jface api帮助文档

    在学习和使用SWT和JFace API时,查阅这份中文帮助文档将非常有益。它会详细解释每个类、接口和方法的功能,以及如何在实际项目中应用它们。通过深入理解和实践,你可以创建出高效、美观且易于维护的Java桌面应用程序...

    Eclipse SWT/JFace 核心应用的全部源代码

    其次,JFace是在SWT基础上构建的一层抽象,它简化了SWT的使用,提供了一种面向对象的API,使得开发人员可以更加专注于业务逻辑,而不是底层的GUI细节。JFace包括数据绑定、视图管理、对话框和服务等组件,它将许多...

    SWT/JFace 3.5 API (CHM)

    7. 表格和树:TableViewer和TreeViewer的使用,以及如何自定义列、行操作和数据提供者。 8. 表单构建:JFace表单构建器简化了复杂表单的创建,如FormToolkit和FormLayout的运用。 通过"SWT-JFace-3.5-API.chm"文件...

    SWT/JFACE 资料

    2. 控件的使用:如何创建和配置SWT控件,如Button、Text、Shell等,以及JFace的高级控件,如TableViewer和TreeViewer。 3. 事件处理:如何监听和响应用户的操作,如点击按钮、选择列表项等。 4. 布局管理:如何使用...

    SWT/JFace编程

    - **表格和树**:JFace提供了TableViewer和TreeViewer,提供了对SWT表格和树的强大支持,包括排序、过滤等功能。 3. **进阶主题**: - **SWT和JFace的集成**:如何在SWT控件和JFace组件之间进行有效整合,以利用...

    Eclipse Swt/Jface核心应用 (01-03章)

    Eclipse SWT(Standard Widget Toolkit)和JFace是用于构建Java GUI应用程序的强大工具,它们与Eclipse IDE紧密集成,提供了一套丰富的用户界面组件和高级框架。本知识点将深入探讨Eclipse SWT和JFace的核心应用,...

    Eclipse Swt/Jface核心应用 (19-23章)

    通过深入学习这19至23章的内容,开发者将能够熟练地使用Eclipse SWT和JFace构建高效、功能丰富的Java GUI应用程序。理解并掌握这些知识点,对于提升开发效率和创建高质量的桌面应用具有重要意义。

    Eclipse Swt/Jface核心应用 (14-19章)

    2. **JFace概述**:JFace是建立在SWT之上的一个高级UI框架,它简化了SWT组件的使用,提供了模型-视图-控制器(MVC)架构,使得代码更加模块化,易于维护。JFace提供了对话框、表视图、树视图、数据绑定等功能,为...

    SWT/JFace API(English)

    **SWT (Standard Widget Toolkit) 和 JFace API** 是Java编程中用于构建图形用户界面(GUI)的重要工具包,尤其在开发Eclipse插件或基于Eclipse RCP(Rich Client Platform)的应用程序时非常常见。SWT是面向底层...

    SWT & JFace_最新最全_API

    例如,JFace的TreeViewer和TableViewer可以帮助开发者轻松创建和管理树形或表格视图。 **API** `SWT & JFace_API_(最新最全).chm` 文件是一个包含SWT和JFace最新、最全面的API文档的离线版。CHM(Compiled Help ...

    用swt/jface实现的资源浏览器jExplorer

    有问题欢迎来信讨论: talent_marquis@163.com<br><br>才搜索了一下,发现jExplorer这个名字已经泛滥了 <br>最核心代码来自IBM的JFace教程 链接如下: ... <br>已经实现的基本功能: <br>1....

    SWT/JFace

    SWT (Standard Widget Toolkit) 和 JFace 是两个在 Eclipse 平台上广泛使用的用户界面框架。SWT 提供了跨平台的 GUI 组件,而 JFace 则是基于 SWT 构建的一套高级 UI 工具包,简化了开发流程。本文将详细介绍如何...

    用SWT/JFace实现的资源管理器jExplorerV0.5(附源码)

    TreeViewer进行目录切换时,TableViewer窗体有时会变成空白 2. 有特殊字符的过滤操作将导致异常 3. 重命名没有考虑特殊字符 4. 有大量文件(几百个以上)的目录会打开的很慢 5. 文件删除失败时没有提示...

    [原创]用SWT/JFace实现的深路径自动生成软件(附源码)

    不过由于是SWT+JFace实现的桌面程序,想研究Java桌面程序应用的朋友也可以下载看看,其一些特性及设计思路还是比较有用的。 <br>详细资料及截图请参考压缩包中doc/how to run.doc文档 <br>新特性: 支持拽...

    全面介绍SWT-JFace

    在"Oreilly.SWT.A.Developers.Notebook.Oct.2004.eBook-LiB.chm"这本书中,读者可以深入学习SWT和JFace的使用方法,包括控件的创建、事件处理、布局管理、数据模型的构建、对话框的使用,以及如何在Eclipse插件开发...

Global site tag (gtag.js) - Google Analytics