📄 tree.java~3~
字号:
package com.util;
import java.util.*;
import com.db.*;
public class Tree {
final static String NODE_NAME_PREFIX = "node_";
Node m_rootNode;
NodeList m_items;
public Tree() {
m_items = new NodeList();
}
/**
* genTree 根据查询语句query生成树
* @param query
*/
public void genTree(String query){
m_items.clear();
NameRecords nrs = DBLib.getNameRecords(query);
//生成树
NameRecord nr;
String id, text, parentId, link;
Node tmpNode, pNode;
for (int i = 0; i < nrs.size(); i++){
nr = nrs.getRecord(i);
id = nr.getFieldValue("NODE_ID");
text = nr.getFieldValue("NODE_TEXT");
parentId = nr.getFieldValue("PARENT_ID");
link = nr.getFieldValue("NODE_LINK");
tmpNode = new Node(id, parentId, text, link);
m_items.addNode(id, tmpNode);
// 初次把节点添加到树,为了效率(因为接下来的adjustTree()比较慢)
if (parentId == null)
m_rootNode = tmpNode;
else {
pNode = m_items.getNode(parentId);
if (pNode != null)
pNode.addChild(tmpNode);
}
}
adjustTree();
}
/**
* genTree 生成树
*/
public void genTree(){
String query = new StringBuffer("select * from test_tree_t ")
.append(" order by parent_id ")
.toString();
genTree(query);
}
/**
* adjustTree
* 搜索初始化树时没有父节点--悬浮节点,并且把这些节点添加到树
* 悬浮节点的 特征 是 存在父节点id,而父节点对象未指定
*/
private void adjustTree(){
Iterator elems = m_items.getElements();
Node tmpNode, pNode;
while (elems.hasNext()){
tmpNode = (Node)elems.next();
pNode = tmpNode.getParentNode();
//如果存在父节点id,而父节点对象未指定
if (pNode == null && tmpNode.getParentId() != null){
pNode = m_items.getNode(tmpNode.getParentId());
pNode.addChild(tmpNode);
}
}
}
/**
* 测试用,显示整棵树
* @param node
* @param level
*/
public void listTree(Node node, int level){
Iterator elems = node.getChildNodes().getElements();
if (level == 0)
System.out.println("Node:" + node.getText());
Node tmpNode;
while (elems.hasNext()){
tmpNode = (Node) elems.next();
for (int i = 2; i <= level+2; i++) System.out.print("--");
System.out.println("Node:" + tmpNode.getText());
if (tmpNode.hasChilds()) listTree(tmpNode, level+1);
}
}
private String getNodeName(Node node){
return NODE_NAME_PREFIX + node.getId();
}
/**
* getJsNode
* @param node
* @return
*/
private String getJsNode(Node node){
String jsNodeName = getNodeName(node);
StringBuffer result = new StringBuffer();
//生成根节点对象
if (node.getId().equals(getRootNode().getId()))
result.append("var ").append(jsNodeName)
.append(" = new Node('").append(jsNodeName)
.append("', '").append(node.getText()).append("'); \n");
//历遍子节点
Iterator elems = node.getChildNodes().getElements();
Node tmpNode;
String jsTmpNodeName;
while (elems.hasNext()){
tmpNode = (Node) elems.next();
jsTmpNodeName = getNodeName(tmpNode);
result.append("var ").append(jsTmpNodeName)
.append(" = new Node('").append(jsTmpNodeName)
.append("', '").append(tmpNode.getText()).append("'); \n")
.append(jsNodeName).append(".addChild(")
.append(jsTmpNodeName).append("); \n");
//假如有链接
String link = tmpNode.getLink();
if (link != null)
result.append(jsTmpNodeName).append(".link='").append(link).append("';\n");
//假如有子节点
if (tmpNode.hasChilds()) result.append(getJsNode(tmpNode));
}
return result.toString();
}
/**
* getJsTree 根据tree.js
* @return
*/
public String getJsTree(){
if (getRootNode() == null) return "";
String rootNodeName = getNodeName(getRootNode());
StringBuffer jsNodes = new StringBuffer(getJsNode(getRootNode())).append("\n")
.append("makeTree(").append(rootNodeName)
.append(" , 0); \n");
return jsNodes.toString();
}
public Node getRootNode(){
return m_rootNode;
}
public static void main(String[] args) throws Exception{
Tree t = new Tree();
t.genTree();
t.listTree(t.getRootNode(), 0);
System.out.println("-----------------------------------------");
System.out.println(t.getJsTree());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -