`

java树控件之dtree,rtree,梅花雪树

阅读更多

java中有些东西是时常会用到但是要是从头开始原生的写的话,就会花掉很多时间,就比如这里的树。在开发中,树控件很常用也很容易发生一些错误。我们假使使用js的树的话,除了关注里面的构成细节之外,还得考虑到它本身的性能如何,是否能满足你的开发需求,最大能渲染渲染出多少的子节点,耗时如何,占用的资源是否合理,能否方便使用ajax等等,都是我们选择树控件时,需要注意的问题,所以这里我列举出我们比较常用的,且性能较为不错的几棵树,供大家不同的需求和选择。

 

这里我列出自己使用过的3棵树,分别是rtree,梅花雪树1.0和dtree。下面就对他们进行一一介绍。老习惯,先上效果图:

  rtree图一

 



  rtree图二

 



  梅花雪树图一

 



  梅花雪树图二

 



  dtree图一

 



  dtree图二

 

 

看到上面的效果图,大家都发现了共同点了,三棵树分别都展示了全部收起和全部展开的这一功能点。我希望大家不要因为看到这几张图片就贸然做出了选择,缘故有两点,第一我们是开发人员该看的是代码和性能而不是效果图,第二我的css太菜,实在弄不好,让三个树风格样式统一,假使公司美工在的话,定然是更加好看的.....

 

 

下面我们逐一介绍,首先是这个rtree,估计经常上论坛的人见过,是曾经的一个精华帖,作者是在dtree的基础上进行的改造,以符合自己的开发需求,号称最大渲染量可以达到25万个节点,我最初也是被这个标题给吸引的,25万呐,结果使用一看,果不其然,25万如我想的一样,跑不起来的.....大概跑到几万就不行了,后来想想,自己还真无聊,实际开发的话,哪里会有这么大的树呀,真是使劲使到刀刃上了.....我们撇开性能不说,看看它是如何做成一棵树的,以此判断它的易用性,毕竟只有好用,方便,才会吸引更多人去使用。下面是它做成一棵树所使用的代码量:

 

<script>
var r=new rTree("r");
r.setNodedbc(true);
r.setNodehref(false);
r.setLazy(false);
r.canAlterbg(true);
r.add(1,0,"a哈罗",'images/folderclose.gif','images/imgfolder.gif','javascript:alert("我们都是哈罗!!!")');
r.add(2,1,"男哈罗","images/folderclose.gif","images/folderopen.gif","","");
r.add(3,1,"b哈罗","images/folderclose.gif","images/folderopen.gif","","");
r.add(4,1,"c哈罗","images/folderclose.gif","images/folderopen.gif","","");
r.add(5,1,"d哈罗","images/folderclose.gif","images/folderopen.gif","","");
r.add(6,2,"e女哈罗",'','',"images/hello1.jpg","show");
r.add(7,2,"f哈罗","images/folderclose.gif","images/folderopen.gif","","");
r.add(8,3,"g哈罗","images/folderclose.gif","images/folderopen.gif","","");
r.add(9,3,"h哈罗","","","","",true);
r.add(10,3,"i哈罗","images/folderclose.gif","images/folderopen.gif","","");
//循环添加,以测试最大渲染量
for(var i=11;i<11;i++){
	r.add(i,parseInt(Math.random()*i),"测试"+i);
}
//r.useBgImg("images/green.jpg");
r.startTree();
</script>

 

 

然后我们看一下梅花雪树的代码:

 

      <SCRIPT LANGUAGE="JavaScript">
          <!--
          var tree = new MzTreeView("tree");
          tree.setIconPath("./");
          tree.nodes['-1_1'] = 'text:节点 1';
          tree.nodes['1_2'] = 'text:节点 2';
          tree.nodes['1_3'] = 'text:节点 3';
          tree.nodes['1_4'] = 'text:节点 4';
          tree.nodes['1_5'] = 'text:节点 5';
          tree.nodes['1_6'] = 'text:节点 6';
          tree.nodes['1_7'] = 'text:节点 7';
          tree.nodes['1_8'] = 'text:节点 8';
          tree.nodes['1_9'] = 'text:节点 9';
          tree.nodes['1_10'] = 'text:节点 10';

          document.getElementById('treeviewarea').innerHTML = tree.toString();
          //下面这句代码就是一展开即聚焦到某一节点上的示例
          setTimeout("tree.focus('1', true); tree.expand(tree.currentNode.id, true);",10);
          
          </SCRIPT>

 

 

最后我们看看dtree的实现代码:

 

<script type="text/javascript">

		var d = new dTree('d');

		d.add(0,-1,'My example tree');
		d.add(1,0,'Node 1','example01.html');
		d.add(2,0,'Node 2','example01.html');
		d.add(3,1,'Node 1.1','example01.html');
		d.add(4,0,'Node 3','example01.html');
		d.add(5,3,'Node 1.1.1','example01.html');
		d.add(6,5,'Node 1.1.1.1','example01.html');
		d.add(7,0,'Node 4','example01.html');
		d.add(8,1,'Node 1.2','example01.html');
		d.add(9,0,'My Pictures','example01.html','Pictures I\'ve taken over the years','','','img/imgfolder.gif');
		d.add(10,9,'The trip to Iceland','example01.html','Pictures of Gullfoss and Geysir');
		d.add(11,9,'Mom\'s birthday','example01.html');
		d.add(12,0,'Recycle Bin','example01.html','','','img/trash.gif');
		//点击节点时,发送一个请求,web中则可以响应一个事件
		d.add(13,0,'MyNode','http://www.baidu.com','send a request to Baidu!!!','','img/question.gif','cd.gif','')

		document.write(d);

	</script>

 

通过上面的易用性对比,我们发现3棵树渲染的主要代码其实大同小异,行数上也差不了多少。那接下来,我们就得去比较它们生成同一棵树,即十个父节点,各自需要的时间。方法则是类似梅花雪树中的计算页面加载耗时的方法,发觉三棵树在加载10000个节点的时候,基本看不出性能上的差别,几次刷新重新渲染情况下,数据如下:

rtree约为:365-549毫秒[全部收起状态]      1422-3972毫秒[全部展开状态]

梅花雪树约为:189-342毫秒[全部收起状态]      3243-5956毫秒[全部展开状态]

dtree约为:189-376毫秒[全部收起状态]      2342-3876毫秒[全部展开状态]

上面测试时,全部在火狐下,而且刷新的之后,有缓存的缘故,时间的间隔可能有些大,到后面几万的时候,三棵树分别在全部展开时,都有卡死的现象,后来就没测试了,这个跟机器性能关系也有很大的关系,所以总体上看,三个性能上也都差不多。

 

这个时候该如何选择呢,我想这个还得大家自己去看源码,去在本机上试试才行。下面我就贴上效果图上的,三棵树的源码,希望能帮助大家做出选择。

  • 大小: 27.9 KB
  • 大小: 38.1 KB
  • 大小: 43 KB
  • 大小: 58.6 KB
  • 大小: 13.1 KB
  • 大小: 23 KB
3
0
分享到:
评论
4 楼 rowanh 2012-10-26  
..看到rtree...进来的。
当时是因为正好有人发了个很挫的树控件,还自吹为很强大,我才放自己做的树控件到javaeye上的。25万的确是标题党了。。当时测下来发现造成速度慢的最大原因是加标签节点到document上,所以加了lazy的属性,当lazy设为true时,的确是可以加载25万的。
主要还是懒,别人的控件一般都功能很强大,当不符合自己需求时,自己去改太累。。自己写的改起来简单。而且大多数时候,自己要的只是几个最简单的功能而已。
3 楼 tkl211 2012-10-26  
zTree,不解释。。
2 楼 Mr.Cheney 2012-10-26  
上面只用过dtree 或者extjs 的tree控件
1 楼 lku1314 2012-10-26  
呵呵 不错 lz 用心了   我只用过dtree   这方面还得像lz学习

相关推荐

    树形控件 DTREE

    **树形控件(DTREE)详解** 树形控件(DTREE)是一种常见的用户界面元素,用于在图形用户界面中展示层次结构的数据。在计算机软件中,它通常被用来组织和显示信息,如文件系统目录、组织结构、数据库结构等。DTREE ...

    树形控件 dtree

    【dtree:JavaScript实现的简单树...总的来说,`dtree`作为一个简洁易用的JavaScript树形控件,为网页开发提供了便利。通过理解其基本原理和API,开发者能够快速地在项目中集成和定制,以满足各种复杂的树形菜单需求。

    三个常用树控件dtree最新dtree带checkbox还有mztreeview1.0跟2.0

    三个常用树控件dtree最新dtree带checkbox还有mztreeview1.0跟2.0里面还有本人写的部分demo如果是常用开发请使用mztree1.0或dtree 如果有特殊需求请使用带checkbox的dtree或mztree2.0

    DTree控件介绍_原创

    DTree控件可以应用于多种编程环境,如JavaScript(例如jQuery UI的Treeview,Dojo的Tree等)、Java(Swing的JTree,JavaFX的TreeView)、C#(Windows Forms的TreeView,WPF的TreeView)等,还有各种Web框架中的实现...

    java树状结构生成代码dtree

    Java开发者通常会通过服务器端生成JSON或XML格式的数据,这些数据随后被dtree解析并渲染成树形结构。 在"selectAddressUser.jsp"和"sendNotification.jsp"这两个文件中,我们可以推测它们可能是处理用户地址选择和...

    dtree实现的树支持多选

    DTree(通常指的是JavaScript实现的树形控件)允许用户通过勾选节点来实现多选功能,提升了用户在大量数据中的选择效率。以下将详细介绍dtree实现多选树的核心知识点: 1. **DHTML与JavaScript基础**:DTree基于...

    dtree树控件的资料

    **dtree树控件详解** dtree是一种常用于Web应用中的图形化用户界面元素,它以树状结构展示数据,便于用户浏览和操作层级关系的数据。这种控件在各种管理系统、文件系统、导航菜单等场景中广泛应用。在本文中,我们...

    树形菜单dtree

    在IT领域,树形菜单(dtree)是一种常见的用户界面元素,它以树状结构来组织数据,便于用户浏览和操作。这种结构模仿了自然界中的树,其中根节点位于顶部,子节点则按照层次关系向下扩展。在本篇文章中,我们将深入...

    一种dtree树用控件实现的

    【dtree树控件详解】 在IT领域,dtree(决策树)经常被用作数据可视化和交互式操作的一种工具,特别是在网页应用和图形用户界面设计中。dtree树控件是一种用于展示层次结构数据的组件,它允许用户通过节点的展开和...

    dTree.js下载+API文档.rar

    dTree.js是一款轻量级的JavaScript库,专门用于在网页中创建交互式的树形结构,如目录树或数据层级展示。这个压缩包包含了dTree.js的实现文件以及相关的API文档和示例,可以帮助开发者快速理解和使用这个库。 首先...

    js树 --dtree

    【标题】"js树 --dtree" 描述的是一个基于JavaScript实现的可拖拽并具有右键菜单功能的树形控件。这个控件可能是为了方便开发者在网页中创建交互式的树状数据结构,比如用于文件系统导航、组织结构展示等场景。通过...

    树控件dtree

    在IT领域,树形控件(Tree ...总的来说,dtree是一个易于使用的树形控件,适合那些希望快速构建层次结构界面的开发者。它的自定义特性、简洁的代码和方便的接口使得它成为了一个强大且灵活的工具,适用于各种Web应用。

    jsp实现树形结构dtree

    【标题】"jsp实现树形结构dtree"涉及的核心技术主要集中在JSP(JavaServer Pages)、JavaScript以及一种叫做dtree的树形展示库。这里,我们将会深入探讨这些技术及其在构建树形结构中的应用。 首先,JSP是Java的一...

    单选多选简单树形框架dtree

    【单选多选简单树形框架dtree】是一种在网页界面上实现的交互式组件,主要用于展示层次结构的数据,如组织架构、文件目录等。它提供了单选和多选功能,使得用户能够方便地在树状结构中进行选择操作。在前端开发中,...

    java Dtree

    在Java编程语言中,"Dtree"通常指的是决策树(Decision Tree)的一种实现。决策树是一种常用的数据挖掘和机器学习算法,它通过构建一棵树状模型来做出一系列决定,最终达到预测或分类的目的。在本场景中,"java ...

    java 创建系统菜单 Dtree.js

    在IT行业中,创建系统菜单是常见的任务之一,特别是在构建用户界面时。`Dtree.js`是一个JavaScript组件,专为创建树形菜单而设计。本文将详细介绍如何利用`Dtree.js`在Java环境中构建动态的、交互式的树型菜单,以及...

    动态树形菜单DTree

    动态树形菜单(DTree)是一种用户界面元素,常用于数据结构展示,特别是层次结构数据,如文件系统、组织架构或数据库分类等。在Web应用和桌面应用中,它能够帮助用户以直观的方式浏览和操作多层级的数据。DTree的...

Global site tag (gtag.js) - Google Analytics