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 :
Barcodescanner use in Modal Window (with constraint)
2guest162.158.94.74o3j47tApr 25, 2024 3:48:54 PMlinkBarcodescanner use in Modal Window (with constraint)
1guest162.158.94.74o3j47tApr 25, 2024 3:46:51 PMlinkBarcodescanner use in Modal Window (with constraint)
3guest162.158.94.753ibjsapApr 25, 2024 3:45:29 PMlinkBarcodescanner use in Modal Window (with constraint)
2guest162.158.94.743ibjsapApr 25, 2024 3:43:55 PMlinkBarcodescanner use in Modal Window (with constraint)
1guest162.158.86.883ibjsapApr 25, 2024 3:36:53 PMlinkfont awesome effects
246guest172.69.63.15220t2jmoApr 25, 2024 2:00:26 PMlinkAnother new ZK fiddle
2guest172.71.134.130218n5u0Apr 25, 2024 10:30:00 AMlinkAnother new ZK fiddle
1guest172.71.134.130218n5u0Apr 25, 2024 10:29:38 AMlinkBarcodescanner use in Modal Window
8guest162.158.95.20135ck08dApr 25, 2024 10:26:46 AMlinkBarcodescanner use in Modal Window
7guest162.158.95.20235ck08dApr 25, 2024 10:25:21 AMlinkTest of tree
1guest176.10.249.68kogcv0Apr 26, 2017 7:17:22 PMlinkresources
index.zulzul<zk>
<window id="demoWindow" apply="pkg$.DemoComposer">
<style>
.h-inline-block {
display: inline-block;
_display: inline;
}
</style>
<tree id="tree" width="300px" >
<treecols>
<treecol label="My Contact List" />
</treecols>
</tree>
</window>
</zk>
DemoComposer.javajava
import java.util.HashMap;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.DropEvent;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.DefaultTreeNode;
import org.zkoss.zul.Hlayout;
import org.zkoss.zul.Image;
import org.zkoss.zul.Label;
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.Window;
public class DemoComposer extends SelectorComposer<Component> {
private static final long serialVersionUID = 3814570327995355261L;
@Wire
private Window demoWindow;
@Wire
private Tree tree;
private AdvancedTreeModel contactTreeModel;
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
contactTreeModel = new AdvancedTreeModel(new ContactList().getRoot());
tree.setItemRenderer(new ContactTreeRenderer());
tree.setModel(contactTreeModel);
}
/**
* The structure of tree
*
* <pre>
* <treeitem>
* <treerow>
* <treecell>...</treecell>
* </treerow>
* <treechildren>
* <treeitem>...</treeitem>
* </treechildren>
* </treeitem>
* </pre>
*/
private final class ContactTreeRenderer implements TreeitemRenderer<ContactTreeNode> {
@Override
public void render(final Treeitem treeItem, ContactTreeNode treeNode, int index) throws Exception {
ContactTreeNode ctn = treeNode;
Contact contact = (Contact) ctn.getData();
Treerow dataRow = new Treerow();
dataRow.setParent(treeItem);
treeItem.setValue(ctn);
treeItem.setOpen(ctn.isOpen());
if (!isCategory(contact)) { // Contact Row
Hlayout hl = new Hlayout();
hl.appendChild(new Image("/widgets/tree/dynamic_tree/img/" + contact.getProfilepic()));
hl.appendChild(new Label(contact.getName()));
hl.setSclass("h-inline-block");
Treecell treeCell = new Treecell();
treeCell.appendChild(hl);
dataRow.setDraggable("true");
dataRow.appendChild(treeCell);
dataRow.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener<Event>() {
@Override
public void onEvent(Event event) throws Exception {
ContactTreeNode clickedNodeValue = (ContactTreeNode) ((Treeitem) event.getTarget().getParent())
.getValue();
Window w = new Window("ZK IM - " + ((Contact) clickedNodeValue.getData()).getName(), "normal",
true);
w.setPosition("parent");
w.setParent(demoWindow);
HashMap<String, String> dataArgs = new HashMap<String, String>();
dataArgs.put("name", clickedNodeValue.getData().getName());
Executions.createComponents("/widgets/tree/dynamic_tree/dialog.zul", w, dataArgs);
w.doOverlapped();
}
});
} else { // Category Row
dataRow.appendChild(new Treecell(contact.getCategory()));
}
// Both category row and contact row can be item dropped
dataRow.setDroppable("true");
dataRow.addEventListener(Events.ON_DROP, new EventListener<Event>() {
@SuppressWarnings("unchecked")
@Override
public void onEvent(Event event) throws Exception {
// The dragged target is a TreeRow belongs to an
// Treechildren of TreeItem.
Treeitem draggedItem = (Treeitem) ((DropEvent) event).getDragged().getParent();
ContactTreeNode draggedValue = (ContactTreeNode) draggedItem.getValue();
Treeitem parentItem = treeItem.getParentItem();
contactTreeModel.remove(draggedValue);
if (isCategory((Contact) ((ContactTreeNode) treeItem.getValue()).getData())) {
contactTreeModel.add((ContactTreeNode) treeItem.getValue(),
new DefaultTreeNode[] { draggedValue });
} else {
int index = parentItem.getTreechildren().getChildren().indexOf(treeItem);
if(parentItem.getValue() instanceof ContactTreeNode) {
contactTreeModel.insert((ContactTreeNode)parentItem.getValue(), index, index,
new DefaultTreeNode[] { draggedValue });
}
}
}
});
}
private boolean isCategory(Contact contact) {
return contact.getName() == null;
}
}
}AdvancedTreeModel.javajavaimport org.zkoss.zul.DefaultTreeModel;
import org.zkoss.zul.DefaultTreeNode;
public class AdvancedTreeModel extends DefaultTreeModel<Contact> {
private static final long serialVersionUID = -5513180500300189445L;
DefaultTreeNode<Contact> _root;
public AdvancedTreeModel(ContactTreeNode contactTreeNode) {
super(contactTreeNode);
_root = contactTreeNode;
}
/**
* remove the nodes which parent is <code>parent</code> with indexes
* <code>indexes</code>
*
* @param parent
* The parent of nodes are removed
* @param indexFrom
* the lower index of the change range
* @param indexTo
* the upper index of the change range
* @throws IndexOutOfBoundsException
* - indexFrom < 0 or indexTo > number of parent's children
*/
public void remove(DefaultTreeNode<Contact> parent, int indexFrom, int indexTo) throws IndexOutOfBoundsException {
DefaultTreeNode<Contact> stn = parent;
for (int i = indexTo; i >= indexFrom; i--)
try {
stn.getChildren().remove(i);
} catch (Exception exp) {
exp.printStackTrace();
}
}
public void remove(DefaultTreeNode<Contact> target) throws IndexOutOfBoundsException {
int index = 0;
DefaultTreeNode<Contact> parent = null;
// find the parent and index of target
parent = dfSearchParent(_root, target);
for (index = 0; index < parent.getChildCount(); index++) {
if (parent.getChildAt(index).equals(target)) {
break;
}
}
remove(parent, index, index);
}
/**
* insert new nodes which parent is <code>parent</code> with indexes
* <code>indexes</code> by new nodes <code>newNodes</code>
*
* @param parent
* The parent of nodes are inserted
* @param indexFrom
* the lower index of the change range
* @param indexTo
* the upper index of the change range
* @param newNodes
* New nodes which are inserted
* @throws IndexOutOfBoundsException
* - indexFrom < 0 or indexTo > number of parent's children
*/
public void insert(DefaultTreeNode<Contact> parent, int indexFrom, int indexTo, DefaultTreeNode<Contact>[] newNodes)
throws IndexOutOfBoundsException {
DefaultTreeNode<Contact> stn = parent;
for (int i = indexFrom; i <= indexTo; i++) {
try {
stn.getChildren().add(i, newNodes[i - indexFrom]);
} catch (Exception exp) {
throw new IndexOutOfBoundsException("Out of bound: " + i + " while size=" + stn.getChildren().size());
}
}
}
/**
* append new nodes which parent is <code>parent</code> by new nodes
* <code>newNodes</code>
*
* @param parent
* The parent of nodes are appended
* @param newNodes
* New nodes which are appended
*/
public void add(DefaultTreeNode<Contact> parent, DefaultTreeNode<Contact>[] newNodes) {
DefaultTreeNode<Contact> stn = (DefaultTreeNode<Contact>) parent;
for (int i = 0; i < newNodes.length; i++)
stn.getChildren().add(newNodes[i]);
}
private DefaultTreeNode<Contact> dfSearchParent(DefaultTreeNode<Contact> node, DefaultTreeNode<Contact> target) {
if (node.getChildren() != null && node.getChildren().contains(target)) {
return node;
} else {
int size = getChildCount(node);
for (int i = 0; i < size; i++) {
DefaultTreeNode<Contact> parent = dfSearchParent((DefaultTreeNode<Contact>) getChild(node, i), target);
if (parent != null) {
return parent;
}
}
}
return null;
}
}
ContactTreeNode.javajavaimport org.zkoss.zul.DefaultTreeNode;
public class ContactTreeNode extends DefaultTreeNode<Contact> {
private static final long serialVersionUID = -7012663776755277499L;
private boolean open = false;
public ContactTreeNode(Contact data, DefaultTreeNode<Contact>[] children) {
super(data, children);
}
public ContactTreeNode(Contact data, DefaultTreeNode<Contact>[] children, boolean open) {
super(data, children);
setOpen(open);
}
public ContactTreeNode(Contact data) {
super(data);
}
public boolean isOpen() {
return open;
}
public void setOpen(boolean open) {
this.open = open;
}
}
ContactList.javajavapublic class ContactList {
public final static String Category = "Category";
public final static String Contact = "Contact";
private ContactTreeNode root;
public ContactList() {
root = new ContactTreeNode(null,
new ContactTreeNode[] {
new ContactTreeNode(new Contact("Friend"),new ContactTreeNode[] {
new ContactTreeNode(new Contact("High School"), new ContactTreeNode[] {
new ContactTreeNode(new Contact("Fernando Terrell", "Contact.png")),
new ContactTreeNode(new Contact("Stanley Larson", "Contact.png"))
},true),
new ContactTreeNode(new Contact("University"), new ContactTreeNode[] {
new ContactTreeNode(new Contact("Camryn Breanna", "Contact.png")),
new ContactTreeNode(new Contact("Juliana Isabela","Contact-gu.png")),
new ContactTreeNode(new Contact("Holden Craig", "Contact-g.png"))
}),
new ContactTreeNode(new Contact("Emma Jones", "Contact-i.png")),
new ContactTreeNode(new Contact("Eric Franklin", "Contact.png")),
new ContactTreeNode(new Contact("Alfred Wong", "Contact.png")),
new ContactTreeNode(new Contact("Miguel Soto", "Contact.png"))
},true),
new ContactTreeNode(new Contact("Work"),new ContactTreeNode[] {
new ContactTreeNode(new Contact("Andrew Willis", "Contact.png")),
new ContactTreeNode(new Contact("Russell Thomas", "Contact-jq.png")),
new ContactTreeNode(new Contact("Donovan Marcus", "Contact.png"))
})
},true
);
}
public ContactTreeNode getRoot() {
return root;
}
}Contact.javajavapublic class Contact {
private final String name;
private final String category;
public Contact(String category) {
this.category = category;
this.name = null;
this.profilepic = null;
}
public Contact(String name, String profilepic) {
this.name = name;
this.profilepic = profilepic;
this.category = null;
}
public String getName() {
return name;
}
public String getCategory() {
return category;
}
public String getProfilepic() {
return profilepic;
}
private final String profilepic;
}