ZK TreeModel and
18 Mar 2010 03:32:06 GMT
19 Mar 2010 23:39:29 GMT
19 Mar 2010 23:39:29 GMT
MyComposer.java
Hi, bhushan
I create a sample
index.zul
<zk> <window apply="ctrl.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>
MyComposer.java
package ctrl;
import 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;
}
}
}
ZK - Open Source Ajax Java Framework
In the following URL we have sample example on TreeModel and TreeitemRenderer.
http://www.zkoss.org/smalltalks/zkTreeModel/
In example where TreeModelA extends AbstractTreeModel we have the fireEvenT(...) method to synchronize model with ui and
it always takes data[] of single column.
In case of Multiple columns we have set Model and PersonTreeitemRenderer to tree,but issue is how to get fireEvent() to synchronize model with ui.
Please provide some sample code where we use TreeItemRender and Treemodel with fireEvent() function.
Thanks in Advance
Bhushan