Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1014|回复: 0

树(JTree)使用详解

[复制链接]

该用户从未签到

发表于 2011-9-14 20:55:20 | 显示全部楼层 |阅读模式
JTree组件被用来以树的形式显示数据,一层套一层,看起来清晰明了,使用户很方便地就了解到各个节点之间的层次关系,可以很容易地找到相关的数据。例如 Windows 系统的文件管理器,相信大部分人都用过。它就是一个典型的树层次结构。JTree的构造函数:
    [li]  ·JTree() 建立一棵默认的树。 [li]  ·JTree(Hashtable data) 利用Hashtable建立树。 [li]  ·JTree(Object[] data) 利用数组建立树。 [li]  ·JTree(TreeModel model) 利用TreeModel建立树。 [li]  ·JTree(TreeNode root) 建立以root为根的树。 [li]  ·JTree(TreeNode root,Boolean children) 建立以 root 为根的树,并设定是否允许有子节点。 [li]  ·JTree(Vector value) 利用Vector建立树。[/li]

  使用一个JTree可以简单地像下面这样表示:
  add(new JTree(new Object[]{"this","that","other"}));
  下列使用了默认的树状物组件在一个滚动框中显示一个树状物。当我们按下按钮时,一个新的子树就被增加到当前选中的节点下,代码如下。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
public class JTreeDemo extends JFrame{
   static int i=0;
   DefaultMutableTreeNode root; /* DefaultMutableTreeNode是树数据结构中的通用节点 */
   DefaultMutableTreeNode child;
   DefaultMutableTreeNode chosen;
   JTree tree;
   DefaultTreeModel model; //使用 TreeNodes 的简单树数据模型.
   String[][] data={{"体育","足球","篮球","乒乓球"},{"娱乐","唱歌","跳舞","相声","小品"},{"电视","长虹","海尔","创维"},{"戏剧","京剧","川剧","越剧"},{"国家","中国","越南","朝鲜","德国"},{"武器","飞机","大炮","坦克"}};
   JTreeDemo(){
      Container contentPane=this.getContentPane();
      JPanel jPanel1=new JPanel(new BorderLayout());
      root=new DefaultMutableTreeNode("根");
      /* DefaultMutableTreeNode(Object userObject) 创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。*/
      tree=new JTree(root); //建立以root为根的树
      jPanel1.add(new JScrollPane(tree),BorderLayout.CENTER); /* 将树添加至滚动窗格中,同时将滚动窗格添加进jPanel1面板 */
      model=(DefaultTreeModel)tree.getModel();
      /* TreeModel getModel() 返回正在提供数据的 TreeModel。 */
      JButton jButton1=new JButton("添加节点");
      jButton1.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
            if(i<data.length){
               child=new Branch(data[i++]).node();
               chosen=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
               /* Object getLastSelectedPathComponent() 返回当前选择的第一个节点中的最后一个路径组件。*/
               if(chosen==null){
                  chosen=root;
               }
               model.insertNodeInto(child,chosen,0);
               /* void insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index) 对它进行调用,以便在父节点的子节点中的 index 位置插入 newChild。*/
            }
         }
      });
      jButton1.setBackground(Color.blue);
      jButton1.setForeground(Color.white);
      JPanel jPanel2=new JPanel();
      jPanel2.add(jButton1);
      jPanel1.add(jPanel2,BorderLayout.SOUTH);
      contentPane.add(jPanel1);
      this.setTitle("JtreeDemo");
      this.setSize(300,500);
      this.setLocation(400,400);
      this.setVisible(true);
   }
   class Branch{
      DefaultMutableTreeNode r;
      public Branch(String[] data){
         r=new DefaultMutableTreeNode(data[0]);
         for(int i=1;i<data.length;i++){
            r.add(new DefaultMutableTreeNode(data));
         }
      }
      public DefaultMutableTreeNode node(){
         return r;
      }
   }
   public static void main(String args[]){
      JTreeDemo test=new JTreeDemo();
   }
}
运行结果如下图所示:
  



  最重要的类就是分支(Branch),它是一个工具,用来获取一个字符串数组并为第一个字符串建立一个 DefaultMutableTreeNode 作为根,其余在数组中的字符串作为叶。然后 node() 方法被调用以产生分支的根 。树状物类包括一个来自被制造的分支的二维字符串数组,以及用来统计数组的一个静态中断i。 DefaultMutableTreeNode 对象控制这个节点,但在屏幕上表示的是被 JTree 和它的相关模型(DefaultTreeModel)所控制。
  JTree 通过它自己的模型来控制。当我们修改这个模型时,模型产生一个事件,导致 JTree 对可以看见的树状物完成任何必要的升级。 在 init() 中,模型由调用 getModel() 方法所捕捉。当按钮被按下时,一个新的分支被创建了。然后,当前选择的组件被找到(如果没有选择就是根)并且由模型的 insertNodeInto() 方法做所有的改变树状物和导致它升级的工作。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

该用户从未签到

发表于 2011-9-20 18:58:12 | 显示全部楼层
不错。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-6-17 15:43 , Processed in 0.467013 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表