ice:tree应用
来源:互联网 发布:苏州淘宝运营公司 编辑:程序博客网 时间:2024/06/05 16:27
树是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:tree应用
- 【IceFaces ice:tree相关知识】
- ice:panelGroup应用
- ice:selectOneMenu应用
- ICE应用实例
- ICE应用小程序
- ICE的应用
- Ice笔记-利用Ice::Application类简化Ice应用
- Ice笔记-利用Ice::Service类简化Ice应用
- Ice笔记-利用Ice::Service类简化Ice应用
- Ice笔记-利用Ice::Application类简化Ice应用
- Ice笔记-利用Ice::Application类简化Ice应用
- ICE内部的logger应用
- ice
- ICE
- ICE
- Ice
- ICE
- 无法定位程序输入点 _except_handler4_common 于动态链接库 msvcrt.dl
- 关于字符界面的基本命令
- DWR web.xml配置
- 你我不付钱,第3方付钱的模式
- ASP 网页登录1秒后自动模拟点击input按钮
- ice:tree应用
- 如何成功,与各位共勉之
- 仿spring中hibernateCallback写了个对session的封装
- 映射 SQL 和 Java 类型
- 虚拟Linux与Windows实现文件共享方法
- 多节点的分布式Mecache的java客户端的使用体会
- 安装 .NET Framework失败的解决方法
- 虚拟机下登陆beso_wifi开发板以及安装图形界面gdb调试工具
- ASP.NET Memory:如果你的应用已经在生产环境中,那为什么还要debug=true