Swing 树形控件的使用+递归实现树形分级显示
2012-03-26 20:02
267 查看
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文件中配置。
附件:http://down.51cto.com/data/2360149
大家好,我叫许斌,很高兴能看到咱们公司的杂志,我也很喜欢总结自己平时的总结和小知识来和大家一起分享。
今天我们来讲讲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文件中配置。
附件:http://down.51cto.com/data/2360149
相关文章推荐
- 无限分级Repeater递归实现:读取一次数据库,使用LINQ2SQL技术,支持排序&显示隐藏
- 【原创】无限分级Repeater递归实现:读取一次数据库,使用LINQ2SQL技术,支持排序&显示隐藏
- 使用PagedDataSource类实现DataList和Repeater控件的分页显示功能
- ASP.NET中使用GridView实现分级显示的代码
- ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(二)
- swing中JList控件使用:每一项以 图片+文字(文字在图片的下面) 的形式显示并且在水平方向排列
- TreeView控件递归实现树形菜单
- IOS 使用CoreText实现表情文本URL等混合显示控件
- 1 用存储过程实现分页,除了上一页,下一页,第一页,和末页外还要有go按钮,以及go到那里的文本框。另外还要在Lable显示“当前x页,一共y页”。注意验证控件的使用和 链接存储过程的内容。
- 使用PagedDataSource类实现DataList和Repeater控件的分页显示[转]
- 使用树形控件显示VB.NET层级数据
- ASP.NET 使用DataList控件实现分页显示数据
- 使用PagedDataSource类实现DataList和Repeater控件的分页显示功能
- 11-界面控件ListView之使用SimpleAdapter实现复杂的界面显示
- 使用嵌套的Repeater控件显示分级数据
- 使用PagedDataSource类实现DataList和Repeater控件的分页显示【转】
- 使用PagedDataSource类实现DataList和Repeater控件的分页显示[转]
- IE下使用控件实现读取本地文件功能并显示
- 使用嵌套的Repeater控件显示分级数据
- IOS 使用CoreText实现表情文本URL等混合显示控件