`
louisling
  • 浏览: 143087 次
  • 性别: Icon_minigender_1
  • 来自: ZhuHai
社区版块
存档分类
最新评论

JFace - TreeViewer

    博客分类:
  • RCP
阅读更多
1) TreeNode
/**
 * It's used by TreeViewer
 * TreeNode root = new TreeNode("Root");
 * treeViewer = new TreeViewer(container, SWT.BORDER);
 * treeViewer.setLabelProvider(new TreeLableProvider());
 * treeViewer.setContentProvider(new TreeContentProvider());
 * treeViewer.setInput(root);
 * 
 * The root node has no parent
 *
 * @author Louis
 */
public class TreeNode {
    //Root has no parent
    public TreeNode parent;

    public String name;
    public List<TreeNode> chidren = new ArrayList<TreeNode>();

    public TreeNode(String name) {
        this.name = name;
    }

    public TreeNode(String name, TreeNode parent) {
        this.name = name;
        this.parent = parent;

        if (parent != null)
            parent.chidren.add(this);
    }

    public TreeNode(String name, TreeNode parent, List<TreeNode> children) {
        this.name = name;
        this.parent = parent;
        this.chidren = children;

        if (parent != null)
            parent.chidren.add(this);
    }

    public void addChild(String childName) {
        new TreeNode(childName, this);
    }

    public TreeNode getParent() {
        return parent;
    }

    public void setParent(TreeNode parent) {
        this.parent = parent;
    }

    public void setChidren(List<TreeNode> chidren) {
        this.chidren = chidren;
    }

    public TreeNode getChildNode(String nodeName) {
        return getChild(this, nodeName);
    }

    public List<TreeNode> getChidren() {
        return chidren;
    }

    public TreeNode getChild(String nodeName) {
        for (TreeNode child : chidren) {
            if (child.name.equals(nodeName)) {
                return child;
            }
        }

        return null;
    }

    public TreeNode getChild(TreeNode parent, String nodeName) {
        for (TreeNode child : parent.chidren) {
            if (child.name.equals(nodeName)) {
                return child;
            }
        }

        return null;
    }

    public boolean hasChild() {
        return this.chidren.size() > 0;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String toString() {
        return name == null ? "" : name;
    }

    public int hashCode() {
        return (name == null) ? 0 : name.hashCode();
    }
}


2) TreeLableProvider, TreeContentProvider

public class TreeLableProvider extends LabelProvider {
    @Override
    public String getText(Object element) {
        if (element instanceof TreeNode)
            return ((TreeNode) element).name;
        else
            return super.getText(element);
    }
}

public class TreeContentProvider implements ITreeContentProvider {
    //1)
    public Object[] getElements(Object inputElement) {
        Object[] elements = null;
        if (inputElement instanceof TreeNode) {
            TreeNode c = (TreeNode) inputElement;
            elements = c.chidren.toArray();
        } else
            elements = new Object[0];

        return elements;
    }

    //2) If has children, show +, click it to expand node
    public boolean hasChildren(Object element) {
        boolean hasChildren = false;

        if (element instanceof TreeNode) {
            TreeNode c = (TreeNode) element;
            hasChildren = c.chidren.size() > 0;
        }

        return hasChildren;
    }

    //3) Click + to get children from this method
    public Object[] getChildren(Object parentElement) {
        Object[] children = null;

        if (parentElement instanceof TreeNode) {
            TreeNode c = (TreeNode) parentElement;
            children = c.chidren.toArray();
        } else
            children = new Object[0];

        return children;
    }

    public Object getParent(Object element) {
        return null;
    }

    public void dispose() {
    }

    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }
}


3) Create TreeViewer

//Must has a hidden root node, it's invisible, as ancestor of all other nodes
private TreeNode root = new TreeNode("Root");

private void createTreeViewer(Composite container) {
    treeViewer = new TreeViewer(container, SWT.BORDER);
    treeViewer.setLabelProvider(new TreeLableProvider());
    treeViewer.setContentProvider(new TreeContentProvider());
    treeViewer.setInput(root);

    tree = treeViewer.getTree();
    tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
}


4) Add init data

private void initData() {
    root.getChidren().clear();
    
    //Level 1 Node - China
    TreeNode china = new TreeNode("China", root);
        //Level 2 Node - Guangdong
        TreeNode guangDong = new TreeNode("Guang Dong", china);
            guangDong.addChild("Zhu Hai");
            guangDong.addChild("Shen Zhen");

        //Level 2 Node - Fujian
        TreeNode fuJian = new TreeNode("Fu Jian", china);
            fuJian.addChild("Xia Men");
            fuJian.addChild("San Ming");
            new TreeNode("Fu Zhou", fuJian);

    //Level 1 - US
    TreeNode us = new TreeNode("US", root);
        TreeNode newYork = new TreeNode("New York", us);
            newYork.addChild("Beacon");
            newYork.addChild("Glen Cove");
            new TreeNode("Rome", newYork);
        
        us.addChild("Los Angeles");
        new TreeNode("Pittsburgh", us);
}
分享到:
评论

相关推荐

    JFace-TableTree的若干问题.doc

    在Java编程环境中,JFace库是Eclipse RCP(Rich Client Platform)的一部分,它提供了一套高级用户界面组件,如TableViewer和TreeViewer,用于构建桌面应用程序。在文档标题和描述中提到的问题主要涉及到JFace中的...

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

    3. 表格和树视图:如何使用TableViewer和TreeViewer来展示和操作结构化数据。 4. 模型-视图-控制器(MVC):解释MVC模式如何帮助保持代码的清晰性和可扩展性。 5. 对话框(Dialogs):介绍如何使用JFace提供的标准...

    JFace-viewer

    **JFace Viewer 知识点详解** 在Java开发领域,特别是使用Eclipse RCP(Rich Client Platform)进行桌面应用开发时,JFace是不可或缺的一部分。JFace是SWT(Standard Widget Toolkit)的一个扩展,提供了更高级别的...

    JFace一些资料

    **JFace技术详解** JFace是Eclipse框架中的一部分,它是构建用户界面(UI)的一种高级工具包。JFace的设计目标是提供一个面向对象的、与操作系统无关的接口,简化Swing和SWT(Standard Widget Toolkit)之间的开发...

    swt/jface api帮助文档

    JFace的TableViewer和TreeViewer提供了一种更抽象的方式来操作这些组件,包括数据绑定和排序。 7. **JFace服务**:包括Dialog、WorkbenchWindow、Action、SelectionService等,它们简化了窗口、动作和选择事件的...

    SWT/Jface API 3.4

    在 JFace 中,TableViewer 和 TreeViewer 扩展了这些功能,添加了数据绑定和自定义列渲染等功能。 8. **Layout Managers**:SWT 提供了多种布局管理器,如 FillLayout、GridLayout、FormLayout 等,用于控制组件在...

    全面介绍SWT-JFace

    4. **表和树的数据视图**:JFace的TableViewer和TreeViewer提供了对表格和树形结构数据的高级支持,包括排序、过滤和分页等功能。 5. **视图和编辑器**:在Eclipse IDE中,JFace用于创建可复用的视图和编辑器组件,...

    The.Definitive.Guide.to.SWT.and.JFace.eBook-LiB

    例如,JFace的TableViewer和TreeViewer使得在表格和树形结构中展示数据变得更为简单。 Eclipse RCP是基于这些组件构建的强大框架,允许开发者创建功能丰富的桌面应用。RCP提供了插件体系结构,允许应用程序模块化,...

    SWT/JFace 3.5 API (CHM)

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

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

    - **表与树组件**:讲解TableViewer和TreeViewer的用法,如何展示表格和树状结构数据,以及如何添加编辑功能。 - **菜单与工具栏**:介绍如何创建菜单栏、工具栏,并添加菜单项和工具按钮,实现相应的功能。 - **...

    org.eclipse.jface.rar

    1. **Viewers**:JFace提供了一种模型-视图-控制器(MVC)的实现,用于构建可定制的数据查看器,如TreeViewer和TableViewer。它们允许开发者以树形或表格形式展示数据,并提供了丰富的操作,如排序、过滤和编辑。 2...

    SWT/JFace从入门到精通

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

    SWT TreeViewer实例

    TreeViewer是SWT中的一个类,它封装了JFace Data Binding的支持,使得我们能够更方便地绑定数据到树形控件上。通过TreeViewer,我们可以创建具有多级节点、可选中状态、以及自定义列的树结构。 在`MyTreeViewer....

    SWT & JFace_最新最全_API

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

    jface treeView 的sample

    在jFace中,`TreeView`是通过`org.eclipse.jface.viewers.TreeViewer`类来实现的。创建一个`TreeViewer`需要一个父容器,通常是 SWT(Standard Widget Toolkit)的`Composite`对象。你可以通过调用`TreeViewer`的...

    SWT/JFACE API

    5. **树和表控件**:JFace的`TreeViewer`和`TableViewer`提供了更高级别的抽象,用于展示和操作树形和表格数据,支持过滤、排序和拖放等功能。 6. **命令框架**:JFace的命令框架允许开发者定义和执行可扩展的用户...

    JFace的源码,从官网下的

    2. **Viewers**:JFace的Viewer是一个通用的组件容器,它可以用来展示数据集合,比如TableViewer、TreeViewer等。Viewer提供了丰富的事件处理机制和扩展接口,方便自定义行为。 3. **Dialogs and Wizards**:JFace...

    Manning - SWT JFace in Action

    5. 表和树视图:使用JFace的TableViewer和TreeViewer来展示复杂的数据结构。 6. 视图和编辑器:理解Eclipse工作台的工作原理,创建自定义视图和编辑器。 7. 性能优化:学习如何避免SWT和JFace中的常见性能问题,提高...

    SWT+JFace 源代码

    3. **表和树的视图**:JFace的TableViewer和TreeViewer类提供了丰富的表格和树形视图功能,支持排序、过滤和自定义列。 4. **对话框和页面**:JFace简化了创建各种对话框和向导页的过程,例如InputDialog、...

    RCP jface 数据绑定 例子和测试范例

    `TreeViewer`是JFace提供的一个树形结构展示组件,用于显示层次化的数据。开发者可以通过自定义内容提供者和标签提供者来定义树的结构和显示方式。在"RCP jface 数据绑定 例子和测试范例"中,这个文件可能包含了一...

Global site tag (gtag.js) - Google Analytics