DefaultMutableTreeNode rootNode=new DefaultMutableTreeNode("根");for(int i=1;i<10000+1;i++){
        DefaultMutableTreeNode childNode1=new DefaultMutableTreeNode(i);
        rootNode.add(childNode1);}
JTree jTree1 = new JTree(rootNode);
本人通过上述方法制作一个Applet在网页中生成tree,但是在生成80w个子节点的时候系统内存已经不够,特此,寻求一种通用的,可重用的,易集成的,运行效率最高的方法,也可以用js生成tree。希望大家能提供更多方法,一起讨论,谢谢!

解决方案 »

  1.   

    一层就有80w个节点!用户怎么查看,不累死啊?
    对一些未知层次数的树形结构,如文件结构,数据库里面的递归等,
    可考虑逐层动态加载子节点,从DefaultMutableTreeNode继承,主要改写几个方法即可
    getChildAt(int index) 
    int getChildCount() 
    boolean isLeaf()  
      

  2.   

    我这里有现成的js代码,很简单的,你自己运行,相应链接作修改就可以了<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    <style>
    <!--
    #foldheader{cursor:hand ; font-weight:bold ;
    list-style-image:url(fold.gif)}
    #foldinglist{list-style-image:url(list.gif)}
    //-->
    </style>
    <script language="JavaScript1.2">
    <!--var head="display:''"
    img1=new Image()
    img1.src="fold.gif"
    img2=new Image()
    img2.src="open.gif"function change(){
       if(!document.all)
          return
       if (event.srcElement.id=="foldheader") {
          var srcIndex = event.srcElement.sourceIndex
          var nested = document.all[srcIndex+1]
          if (nested.style.display=="none") {
             nested.style.display=''
             event.srcElement.style.listStyleImage="url(open.gif)"
          }
          else {
             nested.style.display="none"
             event.srcElement.style.listStyleImage="url(fold.gif)"
          }
       }
    }document.onclick=change//-->
    </script>
    </HEAD><BODY>
    <ul>
       <li id="foldheader">News</li>
       <ul id="foldinglist" style="display:none">
          <li><a href="../../../www.cnn.com/index.html">CNN</a></li>
          <li><a href="../../../www.abcnews.com/index.html">ABC News</a></li>
          <li><a href="../../../www.vancouversun.com/index.html">Vancouver Sun</a></li>
       </ul>   <li id="foldheader">Games</li>
       <ul id="foldinglist" style="display:none">
          <li><a href="../../../www.gamespot.com/index.html">GameSpot</a></li>
          <li><a href="../../../www.happypuppy.com/index.html">Happy Puppy</a></li>
          <li><a href="../../../www.gamecenter.com/index.html">Game Center</a></li>
       </ul>   <li id="foldheader">Software</li>
       <ul id="foldinglist" style="display:none">
          <li><a href="../../../www.download.com/index.html">outer 1</a></li>
          <li><a href="../../../www.hotfiles.com/index.html">outer 2</a></li>
          <li id="foldheader">Nested</li>
          <ul id="foldinglist" style="display:none">
             <li><a href="../../../www.windows95.com/index.html">nested 1</a></li>
             <li><a href="../../../www.shareware.com/index.html">nested 2</a></li>
          </ul>
          <li><a href="../../../www.windows95.com/index.html">outer 3</a></li>
          <li><a href="../../../www.shareware.com/index.html">outer 4</a></li>
       </ul>
    </ul><script language="JavaScript1.2">
    <!--
    /**
     * Get cookie routine by Shelley Powers 
     * ([email protected])
     */
    function get_cookie(Name) {
      var search = Name + "="
      var returnvalue = "";
      if (document.cookie.length > 0) {
        offset = document.cookie.indexOf(search)
        // if cookie exists
        if (offset != -1) { 
          offset += search.length
          // set index of beginning of value
          end = document.cookie.indexOf(";", offset);
          // set index of end of cookie value
          if (end == -1) end = document.cookie.length;
          returnvalue=unescape(document.cookie.substring(offset, end))
          }
       }
      return returnvalue;
    }if (get_cookie(window.location.pathname) != ''){
      var openresults=get_cookie(window.location.pathname).split(" ")
      for (i=0 ; i < openresults.length ; i++){
        foldinglist[openresults[i]].style.display=''
        document.all[foldinglist[openresults[i]].sourceIndex -
    1].style.listStyleImage="url(open.gif)"
      }
    }if (document.all){
      var nodelength=foldinglist.length-1
      var nodes=new Array(nodelength)
      var openones=''
    }function check(){
      for (i=0 ; i <= nodelength ; i++){
        if (foldinglist[i].style.display=='')
           openones=openones + " " + i
      }
      document.cookie=window.location.pathname+"="+openones
    }if (document.all)
      document.body.onunload=check
    //-->
    </script></BODY>
    </HTML>
      

  3.   

    现在是在理论上研究web中tree生成方法,想寻找一个生成tree效率高的方法,刚才又试了一个js的tree所需要的时间比applte长,但是生成50w的时候点击根本展不开拉
      

  4.   

    tree.js文件内容
    function ltrim(str){
       var i=str.length;
       temp=str;   for(j=0;j<i;j++)
         if(temp.charAt(j)!=' '){
           temp=temp.substring(j,i);
           break;
       }
       
       if(j==i){
         return "";
       }
       return temp;
    }function rtrim(str){
       var i=str.length;
       temp=str;   for(j=i;j>0;j--)
         if(temp.charAt(j)!=' '){
           temp=temp.substring(0,j);
           break;
       }
       
       if(j==0){
         return "";
       }   return temp;
    }function trim(str){
       return ltrim(rtrim(str));
    }function showBranch(branch){
    var objBranch = document.getElementById(branch).style;
    if (objBranch.display=="none")
    objBranch.display="block";
    else
    objBranch.display="none";
    swapFolder("I" + branch);
    }function swapFolder(img){objImg = document.getElementById(img);if (objImg.src.indexOf("open.bmp")>-1){objImg.src = "closed.bmp";
    }
    else{objImg.src = "open.bmp";
    }
    }function leaf(text,cls){
    this.text = text;
    this.write = writeLeaf;
    this.cls=cls;
    }
    function writeLeaf(){
    var blankword="" ;
    var n = this.cls;
     for(var i=0;i<n;i++){
      blankword=blankword + "&nbsp;&nbsp;&nbsp;";
    }
    var leafString =blankword + "&nbsp;&nbsp;&nbsp;" + this.text + "<br>";
    return leafString;
    }function branch(id, text,link,cls){
    this.id = id;
    this.text = text;
    this.link = link;
    this.cls=cls;
    this.write = writeBranch;
    this.add = addLeaf;
    this.leaves = new Array();
    }function addLeaf(leaf){
    this.leaves[this.leaves.length] = leaf;}function writeBranch(){
    var branchString ;
    var blankword="" ;
    var n = this.cls; for(var i=0;i<n;i++){
      blankword=blankword + "&nbsp;&nbsp;&nbsp;";
    }  if(this.link!=null&&trim(this.link)!=""&&trim(this.link)!="undefined"){//鏈夎繛鎺?
          branchString ="<span class=\"branch\""  + "> ";
          branchString = branchString + blankword + "<img id=\"I"+this.id+"\" src=\"open.bmp\"" + " onclick=\"showBranch(\'" + this.id + "\')\""+">";     branchString =branchString +"<a href=\""+this.link+"\">"+this.text +"</a> </span><br>";
      }else{//娌℃湁杩炴帴
          branchString ="<span class=\"branch\""  + " onclick=\"showBranch(\'" + this.id + "\')\""+ "> ";
          branchString = branchString + blankword + "<img id=\"I"+this.id+"\" src=\"open.bmp\"" +">";     branchString =branchString +"<font color=\"#3366cc\">" + this.text + "</font>" + " </span><br>";
      }
    //alert(branchString);
    branchString += "<span class=\"leaf\" id=\"";
    branchString += this.id + "\">";
    var numLeaves = this.leaves.length;
    for (var j=0;j< numLeaves;j++) branchString += this.leaves[j].write();
    branchString += "</span>";
    //alert(branchString);
    return branchString;
    }function tree(){
    this.branches = new Array();
    this.add = addBranch;
    this.write = writeTree;
    }
    function addBranch(branch){
      this.branches[this.branches.length] = branch;
    }function writeTree(){
    var treeString = "";
    var numBranches = this.branches.length;for (var i=0;i<numBranches;i++)
    treeString += this.branches[i].write();document.write(treeString);}
    tree.html文件内容
    <html>
    <head>
    <script language="javascript" src="tree.js">
    </script></head>
    <body>
    <script language="javascript">var b1=new branch(1,"b1","",0);
    var b2=new branch(2,"b2","",0);
    var b3=new branch(3,"b3","",0);
    var b4=new branch(4,"b4","",0);
    var b5=new branch(5,"b5","",1);
    var b6=new branch(6,"b6","",1);
    var b7=new branch(7,"b7","",1);
    b1.add(b5);
    b2.add(b6);
    b3.add(b7);
    var tr1=new tree();
    tr1.add(b1);
    tr1.add(b2);
    tr1.add(b3);
    tr1.add(b4);tr1.write();</script>
    </body>
    </html>
    两个文件放在同一目录,打开tree.html文件就可看到效果,有需要改动的自己看着办,要懂javascript的哦,不然寸步难行
      

  5.   

    梅花雪的不错啊
    CSDN都用这个
      

  6.   

    楼主可以区microsoft.msdn.net页面上,但后下载她的lib.htc,然后修改html页面里面的对象为htc曝露出来的对象就可以了!那课树比csdn的好!几乎所有的都cache过了!我就是改的那个!
    如果你需要可以直接和我要 我用的一个配置表把它重新配置起来了[email protected]
      

  7.   

    我觉得最简单生成树的应该是这个了。
    http://www.destroydrop.com/javascripts/tree/
    他只要你传个数据集过去就行了