热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎样构造一个JTree,根据数据库的内容构造!!在线!急.

怎样构造一个JTree,根据数据库的内容构造.比如根据学校的班级结构怎样通过一个函数构造,应该传什么样的参数更方便
怎样构造一个JTree,根据数据库的内容构造.

比如根据学校的班级结构

怎样通过一个函数构造,应该传什么样的参数更方便

6 个解决方案

#1


http://www.goldenclasp.com:8080

#2


要建立树型结构,需要数据库提供的节点信息主要有节点号,节点在用户界面上显示的内容,以及每个节点的父节点号。本例中使用SQL Server 2000数据库,首先建立一个名为tbTree的表用以存储树节点信息,与建树相关的字段设计如下表:

字段名 数据类型 长度   描述                    说明
 
ID      Int      4    节点序号                 关键字,非空
 
Node    Char    30    界面上显示的节点内容     非空
 
ParentsID Int    4    父节点序号               非空
 

#3


在java中,为TreeView控件添加节点的方法是:TreeNode.add(TreeNode node),其中,调用add()方法的是父节点,子节点作参数。

考虑到在实际应用中,经过数次修改之后,ID字段的值可能会不连续,导致tbTree表的记录总数不等于ID字段的最大值的现象。这个时候,从数据库中取出的数据必须先经过一定的处理,而不能直接使用treeNode[parentID[i]].add(treeNode[id[i]])的方式来填充TreeView控件。

因为我对数据库不熟悉,所以只能在程序中作映射,请高手们不要见笑。下面说说我的处理方法:在程序中先将以上字段的记录读到数组中,用一个二维数组map[max_ID][2]通过一层循环,进行子节点编号与其父节点编号的映射,map[i][0]存储编号为i的子节点在数组中的索引号,而map[i][1]中则保存对应编号i节点的父节点的编号,其中map[0][]中保存树的根节点的信息。这样,编号为map[i][0]的节点对应的父节点编号就是map[map[i][1]]。因此,填充TreeView控件时,只需treeNode[map[map[i][1]][0]].add(treeNode[map[i][0]])即可。

#4


实现

以下给出实现用数据库表构造树型结构方法的关键部分的代码。其中该程序名为TbTree.java,下面的TbTree()是构造方法;createTree()是利用数据库中的节点信息创建树的方法;count指tbTree表的记录总数,全局变量;max指tbTree表的ID字段的最大值,全局变量;id数组保存tbTree表ID字段的值,全局变量;node数组保存tbTree表Node字段的值,全局变量;parentId数组保存tbTree表ParentID字段的值,全局变量;newTree是JTree,全局变量:

 

   //TbTree的构造方法

        public TbTree(){

        //连接数据库

        connectDB();

        //从数据库中读取节点信息,将值赋给相应的变量

                  inquireTB();

        //调用createTree()方法创建一棵名为“高校”的树

                  newTree = createTree("高校");

 

                  //构造frame

                  enableEvents(AWTEvent.WINDOW_EVENT_MASK);

        try{

          //调用constructFrame()方法,构造用户界面

        constructFrame();

        }

    catch(Exception e){

            e.printStackTrace();

    }

        }

 

 

/**
 * 用数据库表中的节点信息构造树型结构视图。该程序的关键部分。
 * @param root 所构造的树型结构的根节点。
 * @return 已创建的树。
 */
JTree createTree(String root){
    /**
     * 当前节点号。
     */
    int currentId;
    /**
     * 树的节点,
     * 其内容来自数组node,
     * 因为根节点不在其中,所以比node多分配一个空间。
     */
    DefaultMutableTreeNode[] treeNodes = new DefaultMutableTreeNode[count+1];
    /**
     * 当前节点及其父节点的一个映射关系表。
     * map[][0] 保存子节点在数组id中的索引号,如map[i][0]表示节点i在数组id中索引号;
     * map[][1] 保存对应子节点的父节点号,map[i][1]表示节点i的父节点号;
     * 其中map[0][]保存根节点信息。
     */
    int[][] map = new int[max][2];

    //初始化映射表
    for (int i=1; i         map[i][0] = -1;
        map[i][1] = -1;
    }
    map[0][0] = 0;
    map[0][1] = 0;

    //根节点
    treeNodes[0] = new DefaultMutableTreeNode(root);
    JTree nTree = new JTree(treeNodes[0]);
    
    //做父与子的映射
    for (int i=1; i         currentId = id[i-1];
        treeNodes[i] = new DefaultMutableTreeNode(node[i-1]); //创建树的节点

        map[currentId][0] = i-1;
        map[currentId][1] = parentsId[i-1];
    }

    //为父节点添加其相应的子节点。
    //parentNode.add(childNode);
    for (int i=1; i         if (map[i][0] > -1){
            //父节点是根节点时
            if (map[i][1] == 0){
                treeNodes[map[map[i][1]][0]].add(treeNodes[map[i][0]+1]);
            }
            //父节点非根节点时
            else{
                treeNodes[map[map[i][1]][0]+1].add(treeNodes[map[i][0]+1]);
            }
        }
    }

    return nTree;
}//end createTree

//--------------------------------------
   以上均摘自我的一篇练习论文
//--------------------------------------

#5


俺用递归的哦。。。。就是数据结构里面那种,先序、中序、后序遍历树的同时,就把

tree生成了。。

#6


又学了不少的东西,谢谢大家

推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
author-avatar
夕阳隐日
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有