dtree的下载地址为: http://www.destroydrop.com/javascripts/tree/
我觉得它很好用

解决方案 »

  1.   

    xtree,我正在用的,不错。
    阿赖的也很好用。
      

  2.   

    http://tech.ccidnet.com/art/1060/20041105/173747_1.html
    我早先写的一个小例子,不知对你有否帮助.
      

  3.   

    package com.ljy.catalog;import java.sql.*;
    import java.util.*;/**
     * <p>Title: N层目录树自动生成器</p>
     * <p>Description: 需要的前提条件:数据库是绑死的(一个遗憾,不过很好做)!
     * <p>1>表结构:id,parent_id,title三个字段/p>
     * <p>2>输出数据:页面表示/JavaScript脚本全自动生成 </p>
     * <p>Copyright: Copyright (c) 2005</p>
     * <p>Company: </p>
     * @author ADA(梁金玉)
     * @version 1.0
     */public class CatalogTest {
      static final String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
      static final String url =
          "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";  Connection cn;  int i = 0; //目录树层次控制
      StringBuffer sb = new StringBuffer("<body onload=closes()><table border=1>");
      ArrayList ids = new ArrayList(); //保存所有子树的id
      HashMap child = new HashMap(); //保存单独子树的所有id和处理这些id的方法名
      ArrayList tt = new ArrayList(); //保存单独子树的所有id  public CatalogTest() {
        try {
          Class.forName(driver);
          cn = DriverManager.getConnection(url, "sa", "");
        }
        catch (SQLException ex) {
          System.out.println("sql异常");
        }
        catch (ClassNotFoundException ex) {
          System.out.println("驱动没有找到");
        }
      }  public void getCatalogHTML(int rootId) {
        getCatalog(rootId);
        createScript();
      }  /**
       * 自动生成JavaScript脚本
       */
      private void createScript() {
        sb.append("</table>");
        sb.append("<script language=\"javascript\">");
        sb.append("function closes(){");
        Iterator it = ids.iterator();
        while (it.hasNext()) {
          sb.append("this.tree");
          sb.append(it.next());
          sb.append(".style.display=\"none\";");
        }
        sb.append("}");    Set key = child.keySet();
        it = key.iterator();
        while (it.hasNext()) {
          String k = (String) it.next();
          ArrayList value = (ArrayList) child.get(k);
          if (!value.isEmpty()) {
            sb.append("function ");
            sb.append(k);
            sb.append("(){");
            sb.append("closes();");
            Iterator its = value.iterator();
            while (its.hasNext()) {
              sb.append("this.");
              sb.append(its.next());
              sb.append(".style.display=\"\";");
            }
            sb.append("}");
          }
        }
        sb.append("</script>");
      }  //测试方法
      private void display() {
        Set t = child.keySet();
        Iterator it = t.iterator();
        while (it.hasNext()) {
          System.out.println(it.next());
        }
        t = child.entrySet();
        it = t.iterator();
        while (it.hasNext()) {
          System.out.println(it.next());
        }  }  /**
       * 递归使用注意事项:注意输入和输出的区分。注意全局和局部的区分。
       */
      ArrayList temp=new ArrayList();
      private void getCatalog(int id) {
        String sql = "select id,title from catalog_data where parent_id=" + id;
        try {
          Statement st = null;
          ResultSet rs = null;
          st = cn.createStatement();
          rs = st.executeQuery(sql);
          if (null != rs) {
            while (rs.next()) {
              int temp_id = rs.getInt("id");
              String title = rs.getString("title");
              sb.append("<tr><td id=\"tree");
              sb.append(temp_id);
              sb.append("\">");
              if (-1 != id) {
                ids.add(new Integer(temp_id));
                for (int j = 0; j < i * 2; j++) {
                  sb.append("&nbsp;");
                }
                sb.append("|-");
                sb.append("<a href=#>");
                tt.add("tree" + temp_id);
              }
              if (0 == i) {
                String str = "treeClick" + temp_id;
                child.put(str, tt);            sb.append("<a href=# onclick=treeClick");
                sb.append(temp_id);
                sb.append("()>");
              }
              sb.append(title);
              sb.append("</a></td></tr>");
              i++;
              getCatalog(temp_id);
              i--;
              if (0 == i) { //i==0时意味着下一个根的子树遍历开始。所以要重新构造保存子树id的集合
                tt = new ArrayList();
              }
            }
          }else{
            temp.add(new Integer(id));
          }
        }
        catch (SQLException ex) {
          System.out.println("SQL执行失败");
          ex.printStackTrace();
        }
      }
      private void putchild(){
        Iterator it=temp.iterator();
        while(it.hasNext()){
          System.out.println(it.next());
        }
      }
      public String getText() {
        return sb.toString();
      }  public static void main(String[] args) {
        CatalogTest t = new CatalogTest();
        t.getCatalogHTML( -1);
        System.out.println(t.getText());
    //    t.putchild();
    //    t.display();
      }
    }