没有合适的资源?快使用搜索试试~ 我知道了~
首页java Swing JTree的教程实例
资源详情
资源评论
资源推荐

蓝杰 java 讲习录 只为不凡而来!
第二节:高级 Swing 组件 JTee 应用
目标: 1. 掌握 JTree 应用,树节点的操作;
2. 使用 JTree 展数,管理对象。
1.JTree 的创建:...............................................................................................................................2
2.用 JTree 展示学生日志系统界面:.................................................................................................4
3.JTree 节点的选中和信息获取.......................................................................................................9
4.JTree 的编辑《日志管理实现》:...............................................................................................13
5.完善分析......................................................................................................................................21
总结和任务:.................................................................................................................................23
1

蓝杰 java 讲习录 只为不凡而来!
1.JTree 的创建:
在以上的示例中,我们都是创建默认的 Javax.swing.JTree 组件,本节就要示例,如何根
据我们的需要创建自定义结构的 JTree 组件。首要明白的概念间:JTree 上的节点分为两种,
即枝节点和叶节点,其下有叶节点的,就称做枝节点,或称叶节点的父节点。
不 论 是 叶 节 点 , 还 是 枝 节 点 , 在 代 码 中 , 都 是 表 现 为 一 个
javax.swing.tree.DefaultMutableTreeNode 类的对象,DefaultMutableTreeNode 有一
个 方 法 , 可 以 将 其 它 的 DefaultMutableTreeNode 对 象 加 为 自 己 的 子 节 点 ; 还 有 一 个
setUserObject(Object obj)和 getUserObject 方法,用来设定(或取得)节点内保存的对象。
请看如下代码,创建一个简单的树:
//JTree应用示例
public class TestJTree extends javax.swing.JFrame {
//程序入口
public static void main(String[] args) {
TestJTree tj=new TestJTree();
tj.init();
}
//初始化界面内容
public void init() {
this.setTitle("蓝杰JTree示例");
this.setSize(300, 400);
java.awt.FlowLayout fl = new java.awt.FlowLayout();
this.setLayout(fl);
// 将自己创建的树加到界面上:
javax.swing.JTree tree = createTree();
this.add(tree);
this.setDefaultCloseOperation(3);
this.setVisible(true);
}
//创建一个自定义树
public javax.swing.JTree createTree() {
// 创建默认树
javax.swing.JTree tree = new javax.swing.JTree();
// 首先,创建一个根节点:
javax.swing.tree.DefaultMutableTreeNode rootNode = new
javax.swing.tree.DefaultMutableTreeNode();
// 设定节点上的数据对象,节点显示标题则为设定对象的toString()值
rootNode.setUserObject("树的测试");
// 树下有5个组:
for (int i = 0; i < 5; i++) {
DefaultMutableTreeNode teamNode = new
2

蓝杰 java 讲习录 只为不凡而来!
DefaultMutableTreeNode();
teamNode.setUserObject("第" + i + "组");
// 将组节点加到根节点上:
rootNode.add(teamNode);
for (int t = 0; t < 6; t++) {
DefaultMutableTreeNode userNode = new
DefaultMutableTreeNode();
userNode.setUserObject("第" + t + "个用户");
// 将用户节点加到组节点上:
teamNode.add(userNode);
}
// 创建树的Model对象,创建时传入根节点:
javax.swing.tree.DefaultTreeModel dm = new
DefaultTreeModel(
rootNode);
// 将模型设给树,树上显示的将上前面所加载的节点
tree.setModel(dm);
// 设定树上的图标
// ImageIcon leafIcon = new
ImageIcon("src/budy_init.gif");
// DefaultTreeCellRenderer renderer = new
DefaultTreeCellRenderer();
// renderer.setLeafIcon(leafIcon);
// tree.setCellRenderer(renderer);
}
return tree;
}
}
JTree 创建时,关键的步骤就是:
1. 创建 DefaultMutableTreeNode 对象,设用其 setUserObject 设置节点的数
据对象,这个节点的标签将显示为所设定(传入)的对象的 toString 方法返回
值;
2. 给 DefaultMutableTreeNode 对 象 添 加 做 为 子 节 点 的
DefaultMutableTreeNode 对象;
3. 将第一个,即要做为根节点的 DefaultMutableTreeNode 对象用来构造一个
javax.swing.tree.DefaultTreeModel 对象。
4. 将新建的 DefaultTreeModel 对象 set 给 JTree 对象即可。
比较简单吧,跟 JMenu 的应用方式差不了多少,就是一个一个的向上加。上例程序运
行结果如下图:
3

蓝杰 java 讲习录 只为不凡而来!
JTree 通常用来展示目录结构型的数据,例如学生管理系统中的分组和每组的学生数据;
现在,假设我们要编写一个学生的日志管理系统,将界面用 JTree 展示:
2.用 JTree 展示学生日志系统界面:
假设我们要做一个学生日志管理系统:即每个学生每天都要写一篇学习日志,通过我们的程
序保存和查看:
1.系统中就必须存在学生对象和每个学生的日志对象;我们首先要编写一个学生类和日志类。
2.系统中一个学生对象可能会有多个日志对象;
3.每个日志对象肯定属于某一个学生对象。
4.通过一个 JTree 组件展示,JTree 上的每个一级节点为一个学生对象,点击后,展示出下
面的子节点为用户的日志对象。
经过简单的分析:
学生类必须有的属性:id,name,age
日志类必须有的属性:所属学生的 id,title,content,createTime
学生类代码如下:
import java.util.ArrayList;
import java.util.List;
//学生类定义
public class UserInfo {
private int id;
private String name;
private int age;
// 一个学生对象,有属于自己的多个日志对象,在其内部用队列存放
private List<UserBlog> blogList = new ArrayList();
// 为某个学生的日志队列中加入一个日志对象
public void addBlog(UserBlog blog) {
blogList.add(blog);
4

蓝杰 java 讲习录 只为不凡而来!
}
// 取得学生的所有日志对象
public List<UserBlog> getBlogList() {
return this.blogList;
}
// 对应的get/set各属性的方法:
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
日志类定义的代码如下(随后的代码中,将省略属性对应的 get/set 方法):
//日志类定义
public class UserBlog {
private int id;
private int id_userInfo;// 日志所属学生对象的学生ID
private String title;
private String content;
private String createTime;// 日志创建时间 yyyymmddhh格式
// 一篇日志所属的学生对象
private UserInfo userinfo;
// 以下为对应属性的get/set方法. . .
以上代码需要特别注意的是:学生类在定义时,要考虑到每个学生对象与其日志对象的对
应关系,这种关系,可以在设计类时定义好,后面使用时就非常方便:
学生对象与日志对象之间的关系,可以描述为:
1.一个学生对象,有多个日志对象,这是一对多的关系;在学生类定义时,代码体现为:
. . .
// 一个学生对象,有属于自己的多个日志对象,在其内部用队列存放
private List<UserBlog> blogList = new ArrayList();
// 为某个学生的日志队列中加入一个日志对象
public void addBlog(UserBlog blog) {
blogList.add(blog);
}
// 取得学生的所有日志对象
public List<UserBlog> getBlogList() {
return this.blogList;
}
. . .
对于使用 UserInfo 对象的其它对象而言,只要调用 UserInfo 对象的 getBlogList 即可
得到这个对象的所有日志对象。
2.每个日志对象,都有自己所属的一个学生对象,这是多对一的关系; UserBlog 类中体
现为:
. . .
5
剩余22页未读,继续阅读








安全验证
文档复制为VIP权益,开通VIP直接复制

评论0