Swing 树形控件的使用+递归实现树形分级显示

大家好,我叫许斌,很高兴能看到咱们公司的杂志,我也很喜欢总结自己平时的总结和小知识来和大家一起分享。

今天我们来讲讲Java桌面程序开发中常用的树形控件,所谓树形,其实是一种数据结构,而这种结构的每个元素之间存在着一对多的树形关系的数据结构,所以今天我们也在讨论数据关系中的数据结构。

学习过SSH的程序员都会知道Hibernate中对象之间有很多种关系,一对一、一对多、多对多、自身一对多等等,这些并不是我们今天讨论的重点。

看到标题我们会说今天一定是讲的Swing开发。是的,首先我们先来介绍一下树形控件的类:javax.swing.tree.DefaultMutableTreeNode,这个是jdk中自带的类。我们无需附加任何jar包。

这个类有一种很奇怪的现象。就是他可以改变树形而改变树形本身的样子,这在程序中叫做组合关系。是不是不太清楚了。举个例子就明白了,比如说我们的人是由两只手,两只脚等组成的,那么两只手,两只脚等就组合成了人。这就是生活中的组合关系。

好了好了举个例子看看吧!说了这么多.

 

显示如图:

看到了显示界面是不是感觉没什么。下面我们来设计一个小程序。

从图,我们知道,子节点1是子节点2的子节点,子节点2是根节点的子节点,这里面就有一个从属关系。我们如何设计数据库呢?你现在可以思考一下方案。

经过思考你可能会得到两种方案:

方案一:设计两张表第一张表是所有的父节点,第二张表是所有的父节点的子节点。

方案二:设计一张表在这张表中定义一个外键指向本表的主键。

相比方案一和方案二都有可行之处,各有各的利弊,在这里不再阐述留作思考吧!

数据库设计出来了。

下面讲到这个模块难点的地方了(递归循环):所谓递归:是函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象

如:

 

int i = 0;

public int add(int a) {

if (a < 100) {

i++;

a++;

this.Abc();

this.add(a);

}

return i ;

}

public void Abc(int i){

System.out.println("我是一个程序员!"+i);

}

此方法是传入一个数字判断这个数字如果小于100则会执行相应次数的Abc()方法。好了介绍了递归相信你会有所收获,那么我们要显示这样一个树形就必须使用这样的方法。一次性从数据库中显示一个你意想不到树形。源代码我已经提供给附件中了,相信对你有所帮助。案例中的数据库是MySql的数据库,如果要改数据库请更改swingframework/Dao/Database.java文件中配置。