java中如何实现树形节点

解决方案 »

  1.   

    http://www.teta.com.cn/teta/common/images/MzTreeView10/MzTreeView10.htm   
    MzTreeView 1.0 树形控件 Demo 这个树的节点有1000多个 但速度很快  使用:  
    1.下载控件,MzTreeView10  
    2.把MzTreeView10整个目录放置在web工程下(图片,js)  
    3.在后台建一个 java类(生成字符串返回给前台)  
    格式如下:  tree.nodes["408_1239"]=" text:显示文本; data:id=自己的ID;URL=转向的URl method:alert('');";  !注意分号和 “”号也都要,自己写方法取得数据库要生存树的表所有记录,然后拼凑,一条记录生成一个这样的节点字符串给JS解析  tree是可以指定的树的名称  
    408 是数据库的父节点id  
    1239 是自己的id  
    text 是显示在页面的节点名称  
    data 跟URL 配和,当点击转向另外地址是 后面自动带参数id=自己的ID;如url.jsp?id=5;  
    mehod 点击后触发的js方法,可自定义执行  默认解析根节点为0(数据库要设置)java
      String sqlStr = "select id,parent_id, name from DREAM_COURSE_CATEGORY where parent_id is not null order by parent_id ";
    try {
    HibernateDao.getSession().beginTransaction();
    conn = HibernateDao.getSession().connection();
    stmt = conn.createStatement();
    rs = stmt.executeQuery(sqlStr);while ( rs.next()) {s+="tree.nodes['"+rs.getString("parent_id")+"_"+rs.getString("id")+"'] = 'text:"+rs.getString("name")+";method:myfunc(\""+rs.getString("name")+','+rs.getString("id")+"\")';";
    }
    System.out.println(s);
    conn.commit();
    }catch( SQLException e){
    e.printStackTrace();
    }finally{
    try{
    if( stmt != null ) stmt.close();
    if( rs != null ) rs.close();
    if( conn != null ) conn.close();
    }catch( SQLException e){
    e.printStackTrace();
    }
    }
    jsp<%@ page language="java" pageEncoding="UTF-8"%>
    <%@ page import="util.*,java.util.*,com.feiji.dto.SysMenuDto,org.dom4j.Document;"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <SCRIPT type="text/javascript" src="<%=basePath %>js/test.js"></SCRIPT>
    <SCRIPT type="text/javascript" src="<%=basePath %>js/MzTreeView10.js"></SCRIPT>
    <link rel="stylesheet" href="images/total.css" type="text/css"><style>
     <style type="text/css">
      body, td
      {
      font-family: 宋体;
      font-size: 12px;
      }
      A:LINK, A:VISITED, A:ACTIVE, A:HOVER
      {
      color:#000;
      text-decoration:none;
      font-family:arial;
      font-size:12px;
      padding-left:2px;
      }
      </style>
    <title>文件</title>
    </head><body class="body01"><% %>
      <table width="100%" border=0 cellspacing=3 bgcolor="#B8D1F8">
      <tr>
      <td bgcolor=white valign=top>
      <div id=treeviewarea style="background-color: "></div>
      <SCRIPT LANGUAGE="JavaScript">
      <!--
      var tree = new MzTreeView("tree");
      tree.setIconPath("/elearn/course/treeImages/");
    tree.nodes['0_1'] = 'text:课程目录1';
       
       
      <%
     
     
     
       
      String tree = (String)request.getAttribute("treeList");
       
      out.print(tree);
       
    %>
         document.getElementById('treeviewarea').innerHTML = tree.toString();   
          
       
    function myfunc(n){
    window.returnValue= n;
     
      window.close();
    }
      //-->
      </SCRIPT>
       
      </tr>
      </table>
    </body>
    </html>
      

  2.   

    树型节点,是页面展示的问题,和java关系不大,只是后台按照前台展示需要组织数据,前台树型控件很多,dtree是不错的选择,可以google下。
      

  3.   

            /// <summary>
            /// 邦定到树
            /// </summary>
            private void AddTree()
            {
                //清空树
                this.tvXml.Nodes.Clear();
                //创建根节点
                TreeNode node = new TreeNode("Student");
                //把根添加到树上
                this.tvXml.Nodes.Add(node);
                //循环读取List中的对象
                foreach (Student stu in list)
                {
                    //创建子节点
                    TreeNode name = new TreeNode("姓名:" + stu.Name);
                    TreeNode sex = new TreeNode("性别:" + stu.Sex.ToString());
                    TreeNode age = new TreeNode("年龄:" + stu.Age.ToString());
                    TreeNode hobby = new TreeNode("爱好:" + stu.Hobby);
                    //将子节点添加到根节点下面
                    node.Nodes.Add(name);
                    //在子节点下面添加内容
                    name.Nodes.AddRange(new TreeNode[] { sex, age, hobby });
                }
            }
      

  4.   

    通过jdom+XHtml结合来实现循环添加节点