`

dtree的应用

阅读更多
前几天在javaeye上看到有这样一个帖子(http://www.iteye.com/topic/245728),今天把我的解决代码贴在我的blog中。数据库是这样的记录
year,month,title
2004 3      第一条标题
2004 5      第二条标题
2005 6      第三条标题
2005 6      第四条标题
2002 6      第五条标题
要求在前台以年,月,日,树状展示,比如点击2004,然后出来下面所有的月,在点击月,出来下面所有的标题

这里算是做一个dtree的简单应用吧。

Java代码
package app;  
 
public class Title {  
    private int year;  
    private int month;  
    private String name;  
      
    public Title() {  
    }  
      
    public Title(int year, int month, String name) {  
        this.year = year;  
        this.month = month;  
        this.name = name;  
    }  
      
    public int getYear() {  
        return year;  
    }  
    public void setYear(int year) {  
        this.year = year;  
    }  
    public int getMonth() {  
        return month;  
    }  
    public void setMonth(int month) {  
        this.month = month;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  


package app;

public class Title {
private int year;
private int month;
private String name;

public Title() {
}

public Title(int year, int month, String name) {
this.year = year;
this.month = month;
this.name = name;
}

public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


Java代码
package app;  
 
public class TreeDaoImpl {  
      
    public Title[] queryAllTitle() {  
        Title[] titles = new Title[5];  
        titles[0] = new Title(2004, 3, "第一条标题");  
        titles[1] = new Title(2004, 5, "第二条标题");  
        titles[2] = new Title(2005, 6, "第三条标题");  
        titles[3] = new Title(2005, 6, "第四条标题");  
        titles[4] = new Title(2002, 6, "第五条标题");  
          
        return titles;  
    }  


package app;

public class TreeDaoImpl {

public Title[] queryAllTitle() {
Title[] titles = new Title[5];
titles[0] = new Title(2004, 3, "第一条标题");
titles[1] = new Title(2004, 5, "第二条标题");
titles[2] = new Title(2005, 6, "第三条标题");
titles[3] = new Title(2005, 6, "第四条标题");
titles[4] = new Title(2002, 6, "第五条标题");

return titles;
}
}

Java代码
package app;  
 
import java.util.*;  
 
public class Node {  
    private Object data;  
    private Node parent;  
    private List<Node> children;  
      
    public Node() {  
        children = new ArrayList<Node>();  
    }  
      
    public Node(Object data, Node parent) {  
        this.data = data;  
        this.parent = parent;  
        children = new ArrayList<Node>();  
    }  
      
    public boolean hasChildren() {  
        return children.size() != 0;  
    }  
      
    public boolean containChildData(Object data) {  
        return queryChildByData(data) != null;  
    }  
      
    public Node queryChildByData(Object data) {  
        Node r = null;  
        for(Node node : children) {  
            if(node.getData().equals(data)) {  
                r = node;  
                break;  
            }  
        }  
          
        return r;  
    }  
      
    public void addChild(Node node) {  
        children.add(node);  
    }  
      
    public Object getData() {  
        return data;  
    }  
 
    public void setData(Object data) {  
        this.data = data;  
    }  
 
    public Node getParent() {  
        return parent;  
    }  
 
    public void setParent(Node parent) {  
        this.parent = parent;  
    }  
 
    public List<Node> getChildren() {  
        return children;  
    }  
 
    public void setChildren(List<Node> children) {  
        this.children = children;  
    }  


package app;

import java.util.*;

public class Node {
private Object data;
private Node parent;
private List<Node> children;

public Node() {
children = new ArrayList<Node>();
}

public Node(Object data, Node parent) {
this.data = data;
this.parent = parent;
children = new ArrayList<Node>();
}

public boolean hasChildren() {
return children.size() != 0;
}

public boolean containChildData(Object data) {
return queryChildByData(data) != null;
}

public Node queryChildByData(Object data) {
Node r = null;
for(Node node : children) {
if(node.getData().equals(data)) {
r = node;
break;
}
}

return r;
}

public void addChild(Node node) {
children.add(node);
}

public Object getData() {
return data;
}

public void setData(Object data) {
this.data = data;
}

public Node getParent() {
return parent;
}

public void setParent(Node parent) {
this.parent = parent;
}

public List<Node> getChildren() {
return children;
}

public void setChildren(List<Node> children) {
this.children = children;
}
}


Java代码
package app;  
 
public class MenuTreeBuilder {  
      
    public MenuTreeBuilder(TreeDaoImpl dao) {  
        this.dao = dao;  
        idx = 1;  
        buffer = new StringBuffer();  
    }  
      
    public void generateMenuTree(String rootName) {  
          
        root = new Node(rootName, null);  
          
        Title[] titles = dao.queryAllTitle();  
        for(int i = 0; titles != null && i < titles.length; i++) {  
              
            Node yearNode = null;  
            Node monthNode = null;  
            String year = String.valueOf(titles[i].getYear());  
            String month = String.valueOf(titles[i].getMonth());  
              
            if( !root.containChildData(year) ) {  
                yearNode = new Node(year, root);  
                root.addChild(yearNode);  
            } else {  
                yearNode = root.queryChildByData(year);  
            }  
              
            if( !yearNode.containChildData(month) ) {  
                monthNode = new Node(month, yearNode);  
                yearNode.addChild(monthNode);  
            } else {  
                monthNode = yearNode.queryChildByData(month);  
            }  
              
            monthNode.addChild(new Node(titles[i].getName(), monthNode));  
        }  
 
    }  
      
    public String generateJS() {  
          
        buffer.append("d = new dTree('d');\n");  
        buffer.append("d.add(" + idx + "," + "-1, '" + root.getData().toString() + "');\n");  
          
        privateGenerateJs(root);          
        return buffer.toString();  
    }  
      
    private void privateGenerateJs(Node parentNode) {  
        int rootIdx = idx;  
        for(int i = 0; i < parentNode.getChildren().size(); i++) {  
            Node node = parentNode.getChildren().get(i);  
            ++idx;  
            buffer.append("d.add(" + idx + "," + rootIdx + ", '" + node.getData().toString() + "');\n");  
              
            privateGenerateJs(node);  
        }  
    }  
          
    private TreeDaoImpl dao;  
    private Node root;  
    private int idx;  
    private StringBuffer buffer;  


package app;

public class MenuTreeBuilder {

public MenuTreeBuilder(TreeDaoImpl dao) {
this.dao = dao;
idx = 1;
buffer = new StringBuffer();
}

public void generateMenuTree(String rootName) {

root = new Node(rootName, null);

Title[] titles = dao.queryAllTitle();
for(int i = 0; titles != null && i < titles.length; i++) {

Node yearNode = null;
Node monthNode = null;
String year = String.valueOf(titles[i].getYear());
String month = String.valueOf(titles[i].getMonth());

if( !root.containChildData(year) ) {
yearNode = new Node(year, root);
root.addChild(yearNode);
} else {
yearNode = root.queryChildByData(year);
}

if( !yearNode.containChildData(month) ) {
monthNode = new Node(month, yearNode);
yearNode.addChild(monthNode);
} else {
monthNode = yearNode.queryChildByData(month);
}

monthNode.addChild(new Node(titles[i].getName(), monthNode));
}

}

public String generateJS() {

buffer.append("d = new dTree('d');\n");
buffer.append("d.add(" + idx + "," + "-1, '" + root.getData().toString() + "');\n");

privateGenerateJs(root);
return buffer.toString();
}

private void privateGenerateJs(Node parentNode) {
int rootIdx = idx;
for(int i = 0; i < parentNode.getChildren().size(); i++) {
Node node = parentNode.getChildren().get(i);
++idx;
buffer.append("d.add(" + idx + "," + rootIdx + ", '" + node.getData().toString() + "');\n");

privateGenerateJs(node);
}
}

private TreeDaoImpl dao;
private Node root;
private int idx;
private StringBuffer buffer;
}


Java代码
package app;  
 
public class Test {  
      
    public static void main(String[] args) {  
        TreeDaoImpl dao = new TreeDaoImpl();  
        MenuTreeBuilder mtb = new MenuTreeBuilder(dao);  
        mtb.generateMenuTree("年份");  
        String s = mtb.generateJS();  
        System.out.println(s);  
    }  


package app;

public class Test {

public static void main(String[] args) {
TreeDaoImpl dao = new TreeDaoImpl();
MenuTreeBuilder mtb = new MenuTreeBuilder(dao);
mtb.generateMenuTree("年份");
String s = mtb.generateJS();
System.out.println(s);
}
} 最后,把程序生成的JS替换使用dtree的例子中的部分JS即可。当然,实际应用可能不是这个样子,这里只是做个例子,这个程序可以根据自己的需要更改。程序控制台输出

d = new dTree('d');
d.add(1,-1, '年份');
d.add(2,1, '2004');
d.add(3,2, '3');
d.add(4,3, '第一条标题');
d.add(5,2, '5');
d.add(6,5, '第二条标题');
d.add(7,1, '2005');
d.add(8,7, '6');
d.add(9,8, '第三条标题');
d.add(10,8, '第四条标题');
d.add(11,1, '2002');
d.add(12,11, '6');
d.add(13,12, '第五条标题');
分享到:
评论

相关推荐

    dtree实现的树支持多选

    【dtree实现的树支持多选】是一种在网页交互中常用的数据展示和操作方式,尤其在数据层级结构复杂时,如文件系统、...因此,了解JSP语法和MVC(Model-View-Controller)设计模式对于开发复杂的DTree应用也十分必要。

    dtree动态生成树

    1. **基本实例**:这是最简单的dtree应用,只需引入必要的CSS和JS文件,设置HTML结构,并调用dtree方法初始化树结构。这个实例通常包含基本的展开和折叠节点功能。 2. **异步加载**:在大型数据集下,一次性加载...

    一种dtree树用控件实现的

    【dtree树控件详解】 在IT领域,dtree(决策树)经常被用作数据可视化和交互式操作的...在理解和实现dtree的过程中,需要注意数据结构的设计、前端渲染的优化以及与后端数据的交互,从而构建出高效且易用的dtree应用。

    dtree插件包含api

    ### 三、dtree应用实例 1. **数据加载**:可以结合Ajax从服务器动态获取数据,然后使用`dtree.init()`初始化树形结构。 2. **搜索功能**:通过监听输入框的`input`事件,实时过滤树中的节点,显示匹配的结果。 3. *...

    dtree 资料

    最后,**新建 Microsoft Word 文档.doc**虽然未明确说明,但很可能包含有关Dtree应用的更深入内容。文档可能包含案例研究,通过具体实例展示如何将决策树应用于不同领域的实际问题中,如金融风险评估、医疗诊断、...

    dtree所需要的dtree.css和dtree.js文件(包括图标)

    通过学习和应用`dtree.css`、`dtree.js`及提供的API,开发者能够创建出功能丰富的、视觉上吸引人的树形导航系统。同时,对JSP和HTML的熟练掌握将有助于在服务器端和客户端之间建立顺畅的数据通信,提升整个应用的...

    dtree

    在这个介绍中,我们将深入探讨dtree的制作原理、基本应用以及如何复用这个组件。 首先,理解树(Tree)这种数据结构至关重要。树由节点(Node)组成,每个节点可以有零个或多个子节点。在dtree中,每个节点通常包含...

    dtree使用说明及示例演示

    在信息技术领域,决策树(Decision Tree,简称dtree)是一种广泛应用的数据挖掘和机器学习算法。它通过构建一种树形结构来模拟一系列的决策过程,每个内部节点代表一个特征,每个分支代表一个特征值,而每个叶节点则...

    原始dtree+右键dtree+复选框dtree

    在这个话题中,我们将深入探讨三种特定的树形结构实现:原始dtree、右键dtree以及复选框dtree,这些都是在JavaScript环境下用于创建交互式树形菜单的工具。 首先,原始dtree是最基础的形式,它通常基于HTML、CSS和...

    layui dtree树形结构

    layui dtree是一款基于layui框架的树形插件,它提供了丰富的功能和良好的用户体验,尤其适用于在Web应用中展示层级关系的数据。在这个场景中,我们看到的"layui dtree树形结构"指的是在用户点击一个文本框时,会弹出...

    dtree树 struts1+hibernate+dtree

    首先,dtree(通常指的是JTreeWidget或类似的树形控件)是一种用户界面元素,用于在Web应用中展示层级结构的数据。它通常用于文件系统、组织结构、菜单等场景,让用户能够以直观的方式浏览和操作这些结构。dtree可以...

    dtree.zip|dtree.zip|dtree.zip

    【标题】: "dtree.zip" 是一个包含与决策树(Decision Tree)相关的资源的压缩文件,可能是一个用于展示或教学决策树算法的项目。 【描述】: "dtree.zip" 提供了多个文件,包括样式表(dtree.css)、API文档(api....

    json+dtree定时刷新dtree

    通过这个小demo,我们可以学习到如何结合JSON和DTREE控件,以及如何利用JavaScript实现定时刷新功能,这对于开发需要实时数据展示的Web应用非常有用。这个过程不仅涵盖了前端数据处理和交互,还涉及到了服务器通信和...

    iitraweb+dtree(dtree.js)用法!

    在IT领域, Intraweb 和 dTree.js 是两个非常有用的工具,它们分别服务于Web应用程序开发的不同方面。Intraweb 是一个基于 Delphi 的组件库,用于构建服务器端的Web应用,而 dTree.js 是一个JavaScript库,专门用于...

    dtree和dtree_checkbox(dtree复选框)

    **dtree与dtree_checkbox: JS控件的深入解析** 在网页开发中,交互性和用户体验是至关重要的元素,而JavaScript(简称JS)作为客户端脚本语言,为实现这些功能提供了强大的支持。在这个话题中,我们将重点探讨两种...

    ajax,servlet动态加载dtree

    这个项目可能是一个文件管理系统或者目录浏览应用,其中dtree用于展示文件或目录结构,而Ajax和Servlet则负责后台数据的交互和动态更新。 1. **Ajax**:Ajax是一种在不刷新整个页面的情况下,与服务器交换数据并...

    dtree jsp 中使用,dtree jsp 中使用

    在实际应用中,树的数据可能来自服务器。可以使用Ajax请求获取数据,然后构建`dtree`。例如,使用jQuery的`$.getJSON()`: ```javascript $.getJSON('/api/getTreeData', function(data) { var dTree = new ...

    Dtree JS脚本DEMO

    **Dtree JS脚本DEMO** 是一个基于JavaScript实现的树形菜单库,它提供了简单易用的功能,便于开发者在Web应用中构建层次结构清晰的菜单系统。在给定的压缩包文件中,包含了以下几个关键组件: 1. **dtree.css**: 这...

    dTree.js下载+API文档.rar

    `example01.html`是一个基础示例,它展示了如何在实际项目中应用dTree.js。通过查看这个例子,你可以学习到如何在HTML中引入dTree.js和dtree.css,如何创建树的数据结构,以及如何调用API来构建和操作树。例如,它...

    Dtree控件的使用

    DTree控件是一种在Web应用中常见的用于展示层次结构数据的控件,通常用于构建树状目录或者组织结构图。它以其直观、易用的特性,广泛应用于各种管理信息系统和网站设计中。在这个压缩包中,包含了一个名为`UserTree....

Global site tag (gtag.js) - Google Analytics