您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 403.高级Swing组件JTree应用
蓝杰java讲习录只为不凡而来!1第二节:高级Swing组件JTee应用目标:1.掌握JTree应用,树节点的操作;2.使用JTree展数,管理对象。1.JTree的创建:.........................................................................................................................22.用JTree展示学生日志系统界面:...........................................................................................43.JTree节点的选中和信息获取.................................................................................................94.JTree的编辑《日志管理实现》:..........................................................................................135.完善分析..................................................................................................................................20总结和任务:...............................................................................................................................23蓝杰java讲习录只为不凡而来!21.JTree的创建:在以上的示例中,我们都是创建默认的Javax.swing.JTree组件,本节就要示例,如何根据我们的需要创建自定义结构的JTree组件。首要明白的概念间:JTree上的节点分为两种,即枝节点和叶节点,其下有叶节点的,就称做枝节点,或称叶节点的父节点。不论是叶节点,还是枝节点,在代码中,都是表现为一个javax.swing.tree.DefaultMutableTreeNode类的对象,DefaultMutableTreeNode有一个方法,可以将其它的DefaultMutableTreeNode对象加为自己的子节点;还有一个setUserObject(Objectobj)和getUserObject方法,用来设定(或取得)节点内保存的对象。请看如下代码,创建一个简单的树://JTree应用示例publicclassTestJTreeextendsjavax.swing.JFrame{//程序入口publicstaticvoidmain(String[]args){TestJTreetj=newTestJTree();tj.init();}//初始化界面内容publicvoidinit(){this.setTitle(蓝杰JTree示例);this.setSize(300,400);java.awt.FlowLayoutfl=newjava.awt.FlowLayout();this.setLayout(fl);//将自己创建的树加到界面上:javax.swing.JTreetree=createTree();this.add(tree);this.setDefaultCloseOperation(3);this.setVisible(true);}//创建一个自定义树publicjavax.swing.JTreecreateTree(){//创建默认树javax.swing.JTreetree=newjavax.swing.JTree();//首先,创建一个根节点:javax.swing.tree.DefaultMutableTreeNoderootNode=newjavax.swing.tree.DefaultMutableTreeNode();//设定节点上的数据对象,节点显示标题则为设定对象的toString()值rootNode.setUserObject(树的测试);//树下有5个组:for(inti=0;i5;i++){DefaultMutableTreeNodeteamNode=new蓝杰java讲习录只为不凡而来!3DefaultMutableTreeNode();teamNode.setUserObject(第+i+组);//将组节点加到根节点上:rootNode.add(teamNode);for(intt=0;t6;t++){DefaultMutableTreeNodeuserNode=newDefaultMutableTreeNode();userNode.setUserObject(第+t+个用户);//将用户节点加到组节点上:teamNode.add(userNode);}//创建树的Model对象,创建时传入根节点:javax.swing.tree.DefaultTreeModeldm=newDefaultTreeModel(rootNode);//将模型设给树,树上显示的将上前面所加载的节点tree.setModel(dm);//设定树上的图标//ImageIconleafIcon=newImageIcon(src/budy_init.gif);//DefaultTreeCellRendererrenderer=newDefaultTreeCellRenderer();//renderer.setLeafIcon(leafIcon);//tree.setCellRenderer(renderer);}returntree;}}JTree创建时,关键的步骤就是:1.创建DefaultMutableTreeNode对象,设用其setUserObject设置节点的数据对象,这个节点的标签将显示为所设定(传入)的对象的toString方法返回值;2.给DefaultMutableTreeNode对象添加做为子节点的DefaultMutableTreeNode对象;3.将第一个,即要做为根节点的DefaultMutableTreeNode对象用来构造一个javax.swing.tree.DefaultTreeModel对象。4.将新建的DefaultTreeModel对象set给JTree对象即可。比较简单吧,跟JMenu的应用方式差不了多少,就是一个一个的向上加。上例程序运行结果如下图:蓝杰java讲习录只为不凡而来!4JTree通常用来展示目录结构型的数据,例如学生管理系统中的分组和每组的学生数据;现在,假设我们要编写一个学生的日志管理系统,将界面用JTree展示:2.用JTree展示学生日志系统界面:假设我们要做一个学生日志管理系统:即每个学生每天都要写一篇学习日志,通过我们的程序保存和查看:1.系统中就必须存在学生对象和每个学生的日志对象;我们首先要编写一个学生类和日志类。2.系统中一个学生对象可能会有多个日志对象;3.每个日志对象肯定属于某一个学生对象。4.通过一个JTree组件展示,JTree上的每个一级节点为一个学生对象,点击后,展示出下面的子节点为用户的日志对象。经过简单的分析:学生类必须有的属性:id,name,age日志类必须有的属性:所属学生的id,title,content,createTime学生类代码如下:importjava.util.ArrayList;importjava.util.List;//学生类定义publicclassUserInfo{privateintid;privateStringname;privateintage;//一个学生对象,有属于自己的多个日志对象,在其内部用队列存放privateListUserBlogblogList=newArrayList();//为某个学生的日志队列中加入一个日志对象publicvoidaddBlog(UserBlogblog){blogList.add(blog);蓝杰java讲习录只为不凡而来!5}//取得学生的所有日志对象publicListUserBloggetBlogList(){returnthis.blogList;}//对应的get/set各属性的方法:publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}日志类定义的代码如下(随后的代码中,将省略属性对应的get/set方法)://日志类定义publicclassUserBlog{privateintid;privateintid_userInfo;//日志所属学生对象的学生IDprivateStringtitle;privateStringcontent;privateStringcreateTime;//日志创建时间yyyymmddhh格式//一篇日志所属的学生对象privateUserInfouserinfo;//以下为对应属性的get/set方法...以上代码需要特别注意的是:学生类在定义时,要考虑到每个学生对象与其日志对象的对应关系,这种关系,可以在设计类时定义好,后面使用时就非常方便:学生对象与日志对象之间的关系,可以描述为:1.一个学生对象,有多个日志对象,这是一对多的关系;在学生类定义时,代码体现为:...//一个学生对象,有属于自己的多个日志对象,在其内部用队列存放privateListUserBlogblogList=newArrayList();//为某个学生的日志队列中加入一个日志对象publicvoidaddBlog(UserBlogblog){blogList.add(blog);}//取得学生的所有日志对象publicListUserBloggetBlogList(){returnthis.blogList;}...对于使用UserInfo对象的其它对象而言,只要调用UserInfo对象的getBlogList即可得到这个对象的所有日志对象。2.每个日志对象,都有自己所属的一个学生对象,这是多对一的关系;UserBlog类中体现为:...privateintid_userInfo;//日志所属学生对象的学生ID蓝杰java讲习录只为不凡而来!6privateUserInfouserinfo;//一篇日志所属的学生对象//得到或设定日志对象所属的UserInfo对象publicUserInfogetUserinfo(){returnuserinfo;}publicvoidsetUserinfo(UserInfouserinfo){this.userinfo=userinfo;}publicintgetId_userInfo(){returnid_userInfo;}publicvoidsetId_userInfo(intid_userInfo){this.id_userInfo=id_userInfo;}在UserBlog类中定义了它所属的UserInfo对象为属性,同时,又定义了它所属的UserInfo对象的id,这看起来是重复了,但这样,会方便后面某些使用这些对象的场景。一般情况下,只要定义一个就行了。接下来就很简单,我们用程序模拟生成UserInfo和User
本文标题:403.高级Swing组件JTree应用
链接地址:https://www.777doc.com/doc-4267308 .html