?? tree.java
字號:
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 根據(jù)查詢語句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);
// 初次把節(jié)點添加到樹,為了效率(因為接下來的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
* 搜索初始化樹時沒有父節(jié)點--懸浮節(jié)點,并且把這些節(jié)點添加到樹
* 懸浮節(jié)點的 特征 是 存在父節(jié)點id,而父節(jié)點對象未指定
*/
private void adjustTree(){
Iterator elems = m_items.getElements();
Node tmpNode, pNode;
while (elems.hasNext()){
tmpNode = (Node)elems.next();
pNode = tmpNode.getParentNode();
//如果存在父節(jié)點id,而父節(jié)點對象未指定
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();
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();
//生成根節(jié)點對象
if (node.getId().equals(getRootNode().getId()))
result.append("var ").append(jsNodeName)
.append(" = new Node('").append(jsNodeName)
.append("', '").append(node.getText()).append("'); \n");
//歷遍子節(jié)點
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");
//假如有子節(jié)點
if (tmpNode.hasChilds()) result.append(getJsNode(tmpNode));
}
return result.toString();
}
/**
* getJsTree 根據(jù)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());
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -