⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree.java~3~

📁 有关java的一个简单树
💻 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 + -