一个基于扩展: ChildPropertyTreeModel ,用递归实现的动态树. 自己花了点时间搞了个demo, 希望对后来学习的人有点帮助。 这里做一些内容的介绍:
1: 递归实现:parentId: 树的根节点: treeNode: 当前节点的父节点,如果不是父节点,就以treeNode最后加入的节点为父节点。 以下是代码:
public void generateTree(int parentId , TreeNode treeNode){
while(voi.hasNext()){
Row row = voi.next();
int pId= ((Number)row.getAttribute("ParentId")).intValue();
int id = ((Number)row.getAttribute("Id")).intValue();
String label=String.valueOf(row.getAttribute("NavLabel"));
TreeNode tempNode=new TreeNode("Node",label);
tempNode.setLevel(((Number)row.getAttribute("NavLevel")).intValue());
Map map=new HashMap();
map.put("NavLabel", label);
map.put("Id", id);
map.put("NavAction", row.getAttribute("NavAction"));
tempNode.setAttributes(map);
if(pId==parentId || treeNode==null){
trees.add(tempNode);
treeNode=tempNode;
}else if(pId == treeNode.getAttributes().get("Id")){
treeNode.getChildren().add(tempNode);
}else{
TreeNode[] nodes = (TreeNode[])treeNode.getChildren().toArray();
treeNode = nodes[nodes.length-1];
treeNode.getChildren().add(tempNode);
}
generateTree(parentId,treeNode);
}
2: navigation.sql 是数据库执行文件. 最终执行如下图: