`
hemin108
  • 浏览: 92280 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

zk 手动添加树的节点

    博客分类:
  • Zk
阅读更多
/** copyRight 2010 huaguan
 *  All rights reserved   
 * Create on 2010-9-9 下午05:59:27
 * by hemin Email:303645105@qq.com
 */
package com;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Tree;
import org.zkoss.zul.Treecell;
import org.zkoss.zul.Treechildren;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.Treerow;

public class AddChild extends GenericForwardComposer {

	private static final long serialVersionUID = 7306934226849116514L;
	// 前台树的id
	private Tree tree;
	// 输入框id
	private Textbox cellName;
	// 当前选择item
	private Treeitem treeItemSelected;

	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
	}

	// 点击添加子节点事件
	public void onClick$add() {
		String cellNameStr = cellName.getValue();
		treeItemSelected = tree.getSelectedItem();
		addItem(treeItemSelected, cellNameStr);

	}

	/**
	 * 在选择的节点下添加子节点
	 * 
	 * @param treeitem
	 *            当前选择的节点
	 * @param Str
	 *            需要增加的节点名字
	 */
	private void addItem(Treeitem treeitem, String Str) {
		Treecell treecell = new Treecell(Str);
		Treerow treerow = new Treerow();
		treecell.setParent(treerow);// tree cell只能在 tree row里面
		if (treeitem.getTreerow() == null) {// 一个tree item只能有一个Tree
											// row,item下无row时首先添加一个row
			treeitem.appendChild(treerow);
		} else if (treeitem.getTreechildren() == null) {// 一个tree
														// item只能有一个可选的Tree
														// children
			Treechildren treechildren = new Treechildren();// 如果没有tree
															// children那就添加tree
															// children,并将treeitem添加到treechildren下
			Treeitem treeitems = new Treeitem();
			addItem(treeitems, Str);// 回调,将tree row 添加到tree item下
			treechildren.appendChild(treeitems);// 将tree item添加到新增加的tree
												// children下
			treeitem.appendChild(treechildren);// 将tree item添加到tree children下
		} else {// 一个Tree children下可有多个tree item,当节点下有tree children时,那就直接在tree
				// children下添加tree item
			Treeitem treeitems = new Treeitem();
			addItem(treeitems, Str);// 回调,将tree row 添加到tree item下
			treeitem.getTreechildren().appendChild(treeitems);// 将tree item 添加到
																// 选择item 下的tree
																// children下
		}
	}

	/**
	 * 点击添加0层节点
	 */
	public void onClick$addRoot() {
		String cellNameStr = cellName.getValue();
		Treeitem treeitem = new Treeitem();
		// 创建一个单元格
		Treecell treecell = new Treecell(cellNameStr);
		Treerow treerow = new Treerow();
		// 将单元格设置成tree row的孩子,这里不能appendChild
		treecell.setParent(treerow);
		// 这里不能appendChild,因为一个item只能有一行,但可以有一个Tree children
		treerow.setParent(treeitem);
		// 在树的第一个孩子,就是Tree children下添加一个新的item
		tree.getFirstChild().appendChild(treeitem);
	}
}

 

前台页面 index.zul:

 

<?page title="手动添加树"?>
<window title="Hello World!!" border="normal" width="400px"
	height="400px"  apply="com.AddChild">
	<tree id="tree">
		<treechildren>
			<treeitem>
				<treerow>
					<treecell label="item1" />
				</treerow>
				<treechildren>
					<treeitem>
						<treerow>
							<treecell label="item2" />
						</treerow>
					</treeitem>
				</treechildren>
			</treeitem>
		</treechildren>
	</tree>
	<div>
	<textbox id="cellName"/>
	<button id="add" label="确认添加孩子节点"/>
	<button id="addRoot" label="确认添加0层节点"/>
	
	</div>

</window>

 

写的粗糙 多多指教

  • 大小: 20.4 KB
分享到:
评论
1 楼 freely 2010-12-09  
代码中有两个小小的BUG.这样的话不能完整显示树结构.
/**   
     * 在选择的节点下添加子节点   
     *    
     * @param treeitem   
     *            当前选择的节点   
     * @param Str   
     *            需要增加的节点名字   
     */   
    private void addItem(Treeitem treeitem, String Str) {   
        Treecell treecell = new Treecell(Str);   
        Treerow treerow = new Treerow();   
        treecell.setParent(treerow);// tree cell只能在 tree row里面   
        if (treeitem.getTreerow() == null) {// 一个tree item只能有一个Tree   
                                            // row,item下无row时首先添加一个row   
            treeitem.appendChild(treerow);  
             [color=red]addItem(treeitems, Str);// [/color] 
        } else if (treeitem.getTreechildren() == null) {// 一个tree   
                                                        // item只能有一个可选的Tree   
                                                        // children   
            Treechildren treechildren = new Treechildren();// 如果没有tree   
                                                            // children那就添加tree   
                                                            // children,并将treeitem添加到treechildren下   
            Treeitem treeitems = new Treeitem();  
          [color=red]treeitems.appendChild(treerow); [/color]            addItem(treeitems, Str);// 回调,将tree row 添加到tree item下   
            treechildren.appendChild(treeitems);// 将tree item添加到新增加的tree   
                                                // children下   
            treeitem.appendChild(treechildren);// 将tree item添加到tree children下   
        } else {// 一个Tree children下可有多个tree item,当节点下有tree children时,那就直接在tree   
                // children下添加tree item   
            Treeitem treeitems = new Treeitem();
[color=red]treeitems.appendChild(treerow); [/color]     
            addItem(treeitems, Str);// 回调,将tree row 添加到tree item下   
            treeitem.getTreechildren().appendChild(treeitems);// 将tree item 添加到   
                                                                // 选择item 下的tree   
                                                                // children下   
        }   
    }   

相关推荐

Global site tag (gtag.js) - Google Analytics