`
ribishuangba
  • 浏览: 290929 次
文章分类
社区版块
存档分类
最新评论

ice:tree应用

 
阅读更多

树是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应用"文章中已经描述过,这里不再赘述。



分享到:
评论

相关推荐

    Ice-3.7.4.msi for windows版

    抛出异常: Ice::ConnectionRefusedException(很快, 端口没有被启用引起的,无人监听该端口) 4 使用的对象名字不正确: 发生在使用代理调用接口的时候 原因: 能够找到相应的对象适配器,但是该对象适配器中无法找到...

    Ice入门完整实例

    Ice完整实例,详细介绍了一个完整的简单的Ice应用开发过程

    ice:使用javascript跟踪更改

    ice.js Ice是一种基于...开始使用可内容编辑的初始化-如果您愿意维护自己的文本编辑实用程序,则可以在任何块元素上初始化ice: var tracker = new ice . InlineChangeEditor ( { // element to track - ice will ma

    Vulnhub靶机系列:De-ICE: S1.120

    https://www.vulnhub.com/entry/de-ice-s1120,10/ 靶机设置 靶机默认ip是192.168.1.120,最好设一个对应网段的网卡给它,我的这篇文章有简单指导Vulnhub靶机系列:pWnOS: 2.0另外iso文件如何导入就不赘述了,安装完...

    Ice::snowflake:Swift的开发人员友好软件包经理; 100%与Swift Package Manager兼容

    Ice::snowflake:Swift的开发人员友好软件包经理; 100%与Swift Package Manager兼容

    zeroc ice 3.4.2 source demo

    zeroc ice brocast video or audio. performance is so high. this use c develop. across platform, like:windows, linux, macosx.

    ICE入门 文章集

    ICE 入门 程序员, 2004年几篇介绍ICE的文章, ICE: Internet Communications Engine

    ICE分布式程序设计中文版

    Ice::Current 对象 376 16.6 Servant 定位器 377 16.7 服务器实现技术 391 16.8 Ice::Context 413 16.9 调用超时 418 16.10 单向调用 419 16.11 数据报调用 423 16.12 成批的调用 424 16.13 测试代理的分派类型 426 ...

    ICE:一个简单的CSDL2游戏引擎

    ICE:一个简单的CSDL2游戏引擎

    ice:ICE的纯Rust实现

    ICE的纯Rust实现。 用Rust重写 ICE

    Microchip 推出 MPLAB:registered: REAL ICE:trade_mark:仿真系统

    的单片机和模拟半导体供应商—— Microchip Technology(美国微芯科技公司)近日宣布推出 MPLAB REAL ICE 仿真系统,为采用其 PIC 单片机和dsPIC 数字信号控制器(DSC)进行应用开发的客户创优增值。该系统为...

    zeroc_ice-3.7.6 for python Windows32

    python安装ice: pip install zeroc-ice

    ThinIce:2018年冬季虚幻引擎游戏Jam的参赛作品

    ThinIce:2018年冬季虚幻引擎游戏Jam的参赛作品

    ice:全面的RPC框架,支持C ++,C#,Java,JavaScript,Python等

    通过处理与底层网络编程接口的所有交互,Ice使您可以将精力集中在应用程序逻辑上。 使用Ice时,无需担心细节,例如打开网络连接,对数据进行序列化和反序列化以进行网络传输,或重试失败的连接尝试(仅举几例这样的...

    CICE:CICE海冰模型的开发资料库

    CICE协会海冰模型CICE是用于模拟极地海冰的生长,融化和运动的高效计算模型。 作为结合大气-海洋-陆地-冰层全球气候模型的一个组成部分,如今的CICE模型是经过二十多年的社区合作建立的海冰模型的结果,该模型适用...

    docker-ice:Netflix的AWS使用工具Ice的Docker化版本

    冰,冰宝贝该项目利用Docker来创建运行 (以前是Netflix Ice)的映像。 根据介绍: 从使用和成本的角度来看,Ice可以鸟瞰我们庞大而复杂的云层景观。... 除了应用程序容器之外,该存储库还配置了一个

    ICE:轻量级JavaScript库

    _|_|_| _|_|_| _|_|_|_| _| _| _| _| _| _|_|_| _| _| _| _|_|_| _|_|_| _|_|_|_| ICE - Lightweight JavaScript libraryICE功能: 占地面积小(65KB未压缩) 成熟-自2007年以来在Todoist.com上使用统一的东西可以在...

    ICE的理解、应用

    使用分布式计算中间件ICE到现在已经有一年多了,在这一年里里面对ICE的理解、应用比较熟悉。

    Apache iceberg:Netflix 数据仓库的基石

    Apache Iceberg 是一种用于跟踪超大规模表的新格式,是专门为对象存储(如S3)而设计的。 本文将介绍为什么 Netflix 需要构建 Iceberg,Apache Iceberg 的高层次设计,并会介绍那些能够更好地解决查询性能问题的细节...

    ICE 学报 第三期

    Interpreted Ice: Distributed Application Development on Steroids...8 The Grim Reaper: Making Objects Meet Their Maker...................13 FAQ Corner .....................................................

Global site tag (gtag.js) - Google Analytics