java树控件之dtree,rtree,梅花雪树(一)

2014-11-24 10:14:22 · 作者: · 浏览: 0

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

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

Js代码
<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','java script: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();



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

Js代码
<SCRIPT LANGUAGE="java script">

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);




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

Js代码
<script type="text/java script">

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!!!'