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 :
Another new ZK fiddle
1guest172.69.22.1683bi5dd0Mar 14, 2025 8:57:53 AMlinkZK Chosenbox Sample
135guest172.70.55.1021e133otMar 14, 2025 8:56:12 AMlinkZK 8 x EL 3.0
4guest172.71.215.28smcii2Mar 13, 2025 10:17:02 AMlinkZK 8 x EL 3.0
3guest172.71.215.27smcii2Mar 13, 2025 10:16:37 AMlinkZK 8 x EL 3.0
2guest172.71.215.28smcii2Mar 13, 2025 10:16:23 AMlinkgrid deselect
1guest172.71.155.44d0eqcvMar 13, 2025 8:30:45 AMlinkAnother new ZK fiddle
22guest172.71.155.4320846g3Mar 13, 2025 8:24:21 AMlinkAnother new ZK fiddle
21guest172.71.155.4420846g3Mar 13, 2025 8:23:21 AMlinkAnother new ZK fiddle
20guest172.71.155.4420846g3Mar 13, 2025 8:22:52 AMlinkAnother new ZK fiddle
19guest172.71.155.4420846g3Mar 13, 2025 8:22:31 AMlinkPerformance problem with TreeDataEvent.INTERVAL_REMOVED
6guest217.68.33.1402h2q4u2Oct 5, 2015 11:05:34 AMlinkresources
index.zulzul<zk>
<window border="normal" title="hello" apply="pkg$.TestComposer">
<div>This demonstrates a performance problem in IE with the fireEvent method in TreeModel to remove many tree items.
Tested with IE11.
Chrome has no problems at all.
Invalidating the tree after changing the model and firing the events fixes the performance problem, but should that really be necessary?
And if so, how come it works just fine without it in Chrome?
</div>
<button id="btnRemove" label="Remove a bunch of tree items" />
<tree id="tree" height="200px" width="200px"/>
</window>
</zk>
TestComposer.javajavaimport org.zkoss.zk.ui.*;
import org.zkoss.zk.ui.event.*;
import org.zkoss.zk.ui.util.*;
import org.zkoss.zk.ui.ext.*;
import org.zkoss.zk.au.*;
import org.zkoss.zk.au.out.*;
import org.zkoss.zul.*;
import java.util.*;
public class TestComposer extends GenericForwardComposer{
Tree tree;
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
tree = (Tree)comp.getFellow("tree");
tree.setItemRenderer(new TreeitemRenderer() {
public void render(Treeitem item, Object data, int index) {
Treerow treerow = new Treerow();
treerow.setParent(item);
Treecell treecell = new Treecell();
treecell.setParent(treerow);
treecell.appendChild(new Label((String)((TestNode)data).getLabel()));
}
});
List<TestNode> list = new ArrayList<TestNode>();
for( int i=0; i<1500; ++i) {
list.add(new TestNode("" +i));
}
TestNode node = new TestNode("main",list);
TestTreeModel model = new TestTreeModel(node);
tree.setModel(model);
}
public void onClick$btnRemove(Event e) throws InterruptedException{
// Remove a bunch of nodes from the model and fire a TreeDataEvent.INTERVAL_REMOVED for each
//
((TestTreeModel)tree.getModel()).remove();
// Invalidating the tree solves the problem, but should this really be needed?
// Seems that Chrome is just fine without it, so why is it needed in IE11?
//
// tree.invalidate();
}
}
TestTreeModel.javajava
import org.zkoss.zul.*;
import org.zkoss.zul.event.*;
public class TestTreeModel extends AbstractTreeModel{
public TestTreeModel(TestNode root) {
super(root);
}
public void remove() {
// I know that it would be better to fire one event here with different from and to index.
// This is just to point out the problem
//
for( int i=0; i<1490; ++i) {
((TestNode)getRoot()).getChildren().remove(0);
this.fireEvent(getRoot(), 0, 0, TreeDataEvent.INTERVAL_REMOVED);
}
}
@Override
public Object getChild(final Object parentObject, final int index)
{
TestNode node = (TestNode)parentObject;
return node.getChildren().get(index);
}
@Override
public int getChildCount(final Object parentObject)
{
return ((TestNode)parentObject).getChildren().size();
}
@Override
public boolean isLeaf(final Object parentObject)
{
return getChildCount(parentObject) == 0;
}
@Override
public int getIndexOfChild(Object parent, Object child)
{
TestNode node = (TestNode)parent;
return node.getChildren().indexOf((TestNode)child);
}
}
TestNode.javajavaimport org.zkoss.zk.ui.*;
import org.zkoss.zk.ui.event.*;
import org.zkoss.zk.ui.util.*;
import org.zkoss.zk.ui.ext.*;
import org.zkoss.zk.au.*;
import org.zkoss.zk.au.out.*;
import org.zkoss.zul.*;
import java.util.*;
public class TestNode {
List<TestNode> children;
String label;
public TestNode(String label) {
this(label, new ArrayList<TestNode>());
}
public TestNode(String label, List<TestNode> children) {
this.label = label;
this.children = children;
}
public String getLabel() {
return label;
}
public List<TestNode> getChildren() {
return children;
}
}