package test; import java.util.ArrayList; import java.util.List; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.SelectEvent; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.DefaultTreeModel; import org.zkoss.zul.DefaultTreeNode; import org.zkoss.zul.Textbox; import org.zkoss.zul.Tree; import org.zkoss.zul.Treecell; import org.zkoss.zul.Treeitem; import org.zkoss.zul.TreeitemRenderer; import org.zkoss.zul.Treerow; import org.zkoss.zul.ext.Selectable; public class TreeTestCtrl extends GenericForwardComposer { private static final long serialVersionUID = 1L; Tree tree; Textbox logs; @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); tree.setItemRenderer(new TestRenderer()); } public void onSelect$tree(SelectEvent ev) { String text = ""; Selectable set = (Selectable) tree.getModel(); for (Object obj : set.getSelection()) { TestVO vo = (TestVO) ((DefaultTreeNode) obj).getData(); if (text.length() > 0) text +="/"; text += vo.getName(); } logs.setValue(logs.getValue() + text + "\n"); tree.setModel(getModel()); } public DefaultTreeModel getModel() { TestVO root = new TestVO("root"); TestVO a = new TestVO("A"); a.addChild(new TestVO("A1")); a.addChild(new TestVO("A2")); a.addChild(new TestVO("A3")); a.addChild(new TestVO("A4")); root.addChild(a); TestVO b = new TestVO("B"); b.addChild(new TestVO("B1")); b.addChild(new TestVO("B2")); b.addChild(new TestVO("B3")); b.addChild(new TestVO("B4")); root.addChild(b); return new DefaultTreeModel(getAsTreeNode(root)); } private static DefaultTreeNode getAsTreeNode(TestVO cat) { DefaultTreeNode node = null; List children = cat.getChildren(); if (children.isEmpty()) { node = new DefaultTreeNode(cat); } else { node = new DefaultTreeNode(cat, new DefaultTreeNode[] {}); for (TestVO child : children) { node.add(getAsTreeNode(child)); } } return node; } public class TestVO { private String name; private final List children = new ArrayList(); public TestVO(String name) { this.name = name; } public String getName() { return name; } public List getChildren() { return children; } public void addChild(TestVO child) { children.add(child); } } public class TestRenderer implements TreeitemRenderer { public void render(Treeitem ti, Object node) throws Exception { TestVO cat = (TestVO) ((DefaultTreeNode) node).getData(); ti.setValue(node); ti.setOpen(true); ti.setSelected(cat.getName().contains("1")); Treerow treeRow = new Treerow(); ti.appendChild(treeRow); treeRow.appendChild(new Treecell(cat.getName())); } } }