您现在的位置: 365建站网 > 365文章 > ice:tree应用

ice:tree应用

文章来源:365jz.com     点击数:160    更新时间:2009-09-12 16:51   参与评论

树是c/s应用程序界面上的常见控件,在web上,实现一棵树通常需要css和div的配合,实现一个ajax特性的树还需要ajax知识。ice:tree实现了这些功能。ice:tree的官方文档参考:
http://facestutorials.icefaces.org/tutorial/tree-tutorial.html。本篇文章要弥补官方指南的不足,解释清楚对象模型,并提供一个接口,帮助简化事件拦截机制。
    在我的应用程序中,有一棵树,根结点为"标准短语库",右键选择该节点后,可以创建新短语库,新创建的短语库作为根结点的子节点。右键点击某个短语库,可以选择”删除“、“重命名”菜单。左键单击某个短语库,右边表格将显示短语库中的短语。
    ice:tree的value属性必须通过getXX方法获取接口javax.swing.tree.TreeModel。我们可以自己实现TreeModel,不过大多数情况下我们使用javax.swing.tree.DefaultTreeModel类。先来看一下页面代码:


    DefaultTreeModel对象要包含一个根节点--一个DefaultMutableTreeNode对象。DefaultMutableTreeNode类的add方法可以加入子节点。DefaultMutableTreeNode对象的setUserObject方法可以让我们将IceUserObject对象或者子类对象放入其中。IceUserObject就是用于存储树节点的数据的,提供了setText,setExpanded等方法。为了方便拦截树的点击事件,我扩展了IceUserObject类,可以从后面的代码中看到。
    private void loadTree() throws DBConnectionException, SQLException {

        DefaultMutableTreeNode rootTreeNode = new DefaultMutableTreeNode();
        MyIceUserObject rootObject = new MyIceUserObject(rootTreeNode);
        rootObject.setText("标准短语库");
        rootObject.setExpanded(true);
        rootObject.addTreeEventListener(this);
        rootTreeNode.setUserObject(rootObject);

        treeModel = new DefaultTreeModel(rootTreeNode);

        List libraries = StandardPhraseLibraryManager.load();
        for (StandardPhraseLibrary library : libraries) {
            DefaultMutableTreeNode branchNode = new DefaultMutableTreeNode();
            MyIceUserObject branchObject = new MyIceUserObject(branchNode);
            branchObject.setText(library.getName());
            branchObject.addTreeEventListener(this);
            branchNode.setUserObject(branchObject);
            rootTreeNode.add(branchNode);
        }
    }

    loadTree函数用于初始化短语库树的所有节点。MyIceUserObject的addTreeEventListener将当前managed bean的this指针加入到事件侦听列表中,managed bean必须实现TreeEventListener接口的方法,该方法将会在发生了点击事件的时候被调用:
    public void clickItem(MyIceUserObject source) {
        
    }

    现在来看一下MyIceUserObject类的代码:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Freebird.Helper;

import com.icesoft.faces.component.tree.IceUserObject;
import java.util.ArrayList;
import java.util.List;
import javax.faces.event.ActionEvent;
import javax.swing.tree.DefaultMutableTreeNode;

/**
 *
 * @author freebird
 */
public class MyIceUserObject extends IceUserObject{

    public MyIceUserObject(DefaultMutableTreeNode wrapper){
        super(wrapper);
    }

    private List listeners=new ArrayList();

    public void addTreeEventListener(TreeEventListener listener){
        listeners.add(listener);
    }

    private Object data;

    /**
     * @return the data
     */
    public Object getData() {
        return data;
    }

    /**
     * @param data the data to set
     */
    public void setData(Object data) {
        this.data = data;
    }

    public void clickItem(ActionEvent ev){
        for(TreeEventListener listener : listeners){
            listener.clickItem(this);
        }
    }
}

    
TreeEventListener接口代码如下:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Freebird.Helper;

/**
 *
 * @author freebird
 */
public interface TreeEventListener {

    public void clickItem(MyIceUserObject source);
}


    关于右键单击出现上下文菜单的内容,在我前面的"ice:panelGroup应用"文章中已经描述过,这里不再赘述。



如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (160人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号