Suggested case list:
Using timer to refresh a grid
383guest172.69.33.12125nk0uiMay 7, 2020 7:23:47 AMlinkuser model to move item to another listbox
120guest162.158.193.148d0n3krApr 2, 2020 5:28:28 AMlinkDisabled list item row passed to VM-1981
296fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:44 PMlinkDisabled list item row passed to VM-1981
295fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:16 PMlinkDisabled list item row passed to VM-1981
294fatih123160.83.36.13225nk0uiFeb 13, 2018 3:30:44 PMlinkgrid sample with ListModel/RowRenderer
816guest80.82.2.1312vah9ajFeb 21, 2017 11:42:21 AMlinkgrid sample with ListModel/RowRenderer
809guest175.98.113.1622vah9ajJan 26, 2017 9:19:33 AMlinkgrid sample with ListModel/RowRenderer
196guest79.185.142.402vah9ajApr 26, 2014 10:53:57 PMlinkgrid sample with ListModel/RowRenderer
195guest79.185.142.402vah9ajApr 26, 2014 10:53:54 PMlinkgrid sample with ListModel/RowRenderer
194guest79.185.142.402vah9ajApr 26, 2014 10:53:51 PMlinkgrid sample with ListModel/RowRenderer
193guest79.185.142.402vah9ajApr 26, 2014 10:53:48 PMlinkgrid sample with ListModel/RowRenderer
192guest79.185.142.402vah9ajApr 26, 2014 10:53:44 PMlinkgrid sample with ListModel/RowRenderer
191guest79.185.142.402vah9ajApr 26, 2014 10:53:40 PMlinkHierarchy table without using ZK PE/EE
1aaknai151.28.135.2131s871daJul 29, 2013 11:02:46 PMlinkgrid sample with ListModel/RowRenderer
128aaknai151.28.135.2132vah9ajJul 29, 2013 7:20:00 PMlinkuser model to move item to another listbox
1TonyQ114.25.109.94d0n3krApr 21, 2012 10:43:27 AMlinkUsing timer to refresh a grid
1TonyQ220.133.44.3725nk0uiFeb 17, 2012 3:17:34 AMlinkFire a event from child iframe
1TonyQ220.133.44.372eupjotFeb 3, 2012 5:04:52 AMlinkTextbox input restriction sample
1TonyQ72.21.245.2431b3nlr0Dec 20, 2011 10:09:10 AMlinkTest web core taglib in ZUL
1TonyQ198.203.175.175ofqkemDec 17, 2011 3:36:08 AMlinkLatest 10 Fiddles :
constraint binding textbox
3guest172.68.151.16220peldaDec 5, 2025 5:08:19 PMlinkAnother new ZK fiddle
2guest172.68.151.16320peldaDec 5, 2025 5:07:51 PMlinkAnother new ZK fiddle
1guest172.68.151.16220peldaDec 5, 2025 5:07:32 PMlinkAnother new ZK fiddle
1peggypeng172.71.154.99364f4neDec 5, 2025 9:24:31 AMlinktooltip example
2guest104.22.23.13rc1ntoDec 4, 2025 2:23:45 PMlinkAnother new ZK fiddle
1guest172.69.134.2277t7602Dec 4, 2025 1:40:46 PMlinkAnother new ZK fiddle
1peggypeng104.22.17.1802df6e3oDec 4, 2025 8:41:29 AMlinkonClose
1peggypeng172.68.87.248j8kd8aDec 3, 2025 4:10:26 AMlinkAnother new ZK fiddle
1peggypeng172.69.134.2271rm7f4eNov 26, 2025 3:31:24 AMlinkZK-5912-Suggestion
2rebeccalai104.22.20.1442qrmiiuNov 26, 2025 2:07:15 AMlinkTree sample
147guest162.158.179.1273tqq43hMay 19, 2022 8:47:48 AMlinkresources
index.zulzul<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"?>
<zk>
<window apply="pkg$.MyComposer">
<tree id="tree" width="300px" height="500px">
<treecols>
<treecol width="150px" label="Name"/>
<treecol width="120px" label="Email" />
<treecol width="120px" label="AccountId" />
</treecols>
</tree>
<button id="addBtn" label="add"/>
</window>
</zk>TreeComposer.javajavaimport java.util.*;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import org.zkoss.zul.event.TreeDataEvent;
import org.zkoss.zul.event.TreeDataListener;
public class MyComposer extends GenericForwardComposer{
private Tree tree;
private MySimpleTreeModel treeModel;
private SimpleTreeNode rdDep, salesDep;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
//create a PersonTreeitemRenderer
tree.setTreeitemRenderer(new TreeitemRenderer() {
@Override
public void render(Treeitem item, Object data) throws Exception {
if (data == null) return;
SimpleTreeNode t = (SimpleTreeNode)data;
final Person person = (Person)t.getData();
Treerow tr = new Treerow();
tr.setParent(item);
tr.appendChild(new Treecell(person.getName()));
tr.appendChild(new Treecell(person.getEmail()));
tr.appendChild(new Treecell(person.getAccountId()));
item.setOpen(person.isOpen());
item.addEventListener("onOpen", new EventListener() {
public void onEvent(Event event) throws Exception {
Treeitem item = (Treeitem) event.getTarget();
person.setOpen(item.isOpen());
}
});
}
});
//create treemodel and assign root
treeModel = new MySimpleTreeModel(createTreeData());
tree.setModel(treeModel);
}
public void onClick$addBtn(){
Person person = new Person("NewName", "@zkoss.org","767676");
SimpleTreeNode stn = new SimpleTreeNode(person, new ArrayList<SimpleTreeNode>());
treeModel.add(rdDep, stn);
}
private SimpleTreeNode createTreeData() {
//Create nodes for department R and D
String[] name = {"Pierre","Adam","Thomas"};
String[] accountId = {"p001","a002","t003"};
//Create branch department R and D and assigned children to it. rdDep's children are contained in ArrayList alc.
rdDep = new SimpleTreeNode(new Person("R&D","",""), createTreeChildren(name, accountId));
//Create nodes for department sales
String[] name2 = {"Paul","Eric","Gray"};
String[] accountId2 = {"p002","e009","g019"};
//Create branch department sales and assigned children to it
salesDep = new SimpleTreeNode(new Person("Sales","",""), createTreeChildren(name2, accountId2));
//create root and assigned children to it
ArrayList<SimpleTreeNode> al = new ArrayList<SimpleTreeNode>();
al.add(salesDep);
al.add(rdDep);
return new SimpleTreeNode("ROOT",al);
}
private List<SimpleTreeNode> createTreeChildren(String[] name, String[] accountId) {
ArrayList<SimpleTreeNode> alc = new ArrayList<SimpleTreeNode>();
for(int i =0; i < name.length; i++){
Person person = new Person(name<i >,name<i > + "@zkoss.org",accountId<i >);
SimpleTreeNode stn = new SimpleTreeNode(person,new ArrayList<SimpleTreeNode>());
alc.add(stn);
}
return alc;
}
private class MySimpleTreeModel extends SimpleTreeModel{
public MySimpleTreeModel(SimpleTreeNode root) {
super(root);
}
public void add(SimpleTreeNode parent, SimpleTreeNode newNodes){
List<SimpleTreeNode> children = parent.getChildren();
int length = children.size();
children.add(newNodes);
fireEvent(parent, length, length, TreeDataEvent.INTERVAL_ADDED);
}
}
private class Person {
private String _name;
private String _email;
private String _accountId;
private boolean _open;
public Person(String name, String email, String dep) {
super();
_name = name;
_email = email;
_accountId = dep;
}
public String getAccountId() {
return _accountId;
}
public String getEmail() {
return _email;
}
public String getName() {
return _name;
}
public boolean isOpen() {
return _open;
}
public void setOpen(boolean open) {
_open = open;
}
}
}