JTree组件是另外一个复杂组件,它不像 JTable 那样难用,但是也不像 JList 那么容易。使用 JTree 时麻烦的部分是它要求的数据模型。

JTree组件的功能来自树的概念,树有分支和叶子。您在 Windows 中使用 IE 浏览器时,可能非常熟悉这个概念 —— 可以展开和折叠分支,显示可以选择和取消选择的不同叶子。

您很有可能发现树在应用程序中不像表格或列表那样有用,所以在 Internet 上没有许多有帮助的这方面的示例。实际上,像 JTable 一样,JTree 没有什么入门级的功能。如果决定使用 JTree,那么立即就可以达到中级水平,当然还必须学习随之而来的概念。因此,示例应用程序没有介绍 JTree,所以也很不幸,不管是入门教程还是中级教程,都没有涉及这个不太流行的组件。

但是,树有一些时候是符合需求的合理的 UI 组件。文件/目录系统就是一个示例(就像在 IE 浏览器中那样),而且当数据采取层次结构的时候,也就是说数据采用树的形式的时候,JTree组件就是最佳组件。

在 Swing 中,JTree组件看起来如下所示:

    1. import java.awt.Dimension;
    2. import java.awt.Color;
    3. import javax.swing.JFrame;
    4. import javax.swing.JPanel;
    5. import javax.swing.JScrollPane;
    6. import javax.swing.JTree;
    7. import javax.swing.BoxLayout;
    8. import javax.swing.tree.TreePath;
    9. import javax.swing.tree.DefaultMutableTreeNode;
    10. import javax.swing.tree.DefaultTreeModel;
    11. public class JTreeDemo
    12. {
    13. public static void main (String[] args)
    14. {
    15. //构造函数:JTree()
    16. JTree example1 = new JTree();
    17. //构造函数:JTree(Object[] value)
    18. Object[] letters= {"a", "b", "c", "d", "e"};
    19. JTree example2 = new JTree (letters);
    20. //构造函数:JTree(TreeNode root)(TreeNode空)
    21. //用空结点创建树
    22. DefaultMutableTreeNode node1 = new DefaultMutableTreeNode();
    23. //定义树结点
    24. JTree example3 = new JTree (node1);
    25. //用此树结点做参数调用 JTree的构造函数创建含有一个根结点的树
    26. //构造函数:JTree(TreeNode root)(同上,只是TreeNode非空)
    27. //用一个根结点创建树
    28. DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Color");
    29. JTree example4 = new JTree (node2);//结点不可以颜色,默认为白面黑字
    30. example4.setBackground (Color.lightGray);
    31. //构造函数:JTree(TreeNode root, boolean asksAllowsChildren)
      (同上,只是TreeNode又有不同)
    32. //使用DefaultMutableTreeNode类先用一个根结点创建树,
      设置为可添加孩子结点,再添加孩子结点
    33. DefaultMutableTreeNode color = new DefaultMutableTreeNode
      ("Color", true);
    34. DefaultMutableTreeNode gray = new DefaultMutableTreeNode 
      ("Gray");
    35. color.add (gray);
    36. color.add (new DefaultMutableTreeNode ("Red"));
    37. gray.add (new DefaultMutableTreeNode ("Lightgray"));
    38. gray.add (new DefaultMutableTreeNode ("Darkgray"));
    39. color.add (new DefaultMutableTreeNode ("Green"));
    40. JTree example5 = new JTree (color);
    41. //构造函数:JTree(TreeNode root)(同上,只是TreeNode非空)
    42. //通过逐个添加结点创建树
    43. DefaultMutableTreeNode biology = new DefaultMutableTreeNode ("Biology");
    44. DefaultMutableTreeNode animal = new DefaultMutableTreeNode ("Animal");
    45. DefaultMutableTreeNode mammal = new DefaultMutableTreeNode ("Mammal");
    46. DefaultMutableTreeNode horse = new DefaultMutableTreeNode ("Horse");
    47. mammal.add (horse);
    48. animal.add (mammal);
    49. biology.add (animal);
    50. JTree example6 = new JTree (biology);
    51. horse.isLeaf();//if this node allows children.
    52. horse.isRoot();//true if this node is the root of its tree
    53. //构造函数:JTree(TreeModel newModel)
    54. //用DefaultMutableTreeNodel类定义一个结点再用这个结点做参数定义一个用DefaultTreeMode
    55. //创建一个树的模型,再用JTree的构造函数创建一个树
    56. DefaultMutableTreeNode root = new DefaultMutableTreeNode ("Root1");
    57. DefaultMutableTreeNode child1 = new DefaultMutableTreeNode ("Child1");
    58. DefaultMutableTreeNode child11 = new DefaultMutableTreeNode ("Child11");
    59. DefaultMutableTreeNode child111 = new DefaultMutableTreeNode ("Child111");
    60. DefaultMutableTreeNode child1111 = new DefaultMutableTreeNode ("Child1111");
    61. root.add (child1); child1.add (child11);
    62. child11.add (child111);child111.add(child1111);
    63. DefaultTreeModel model = new DefaultTreeModel (root);
    64. JTree example7 = new JTree (model);
    65. JPanel panel = new JPanel();
    66. panel.setLayout (new BoxLayout (panel, BoxLayout.X_AXIS));
    67. panel.setPreferredSize (new Dimension (700, 400));
    68. panel.add (new JScrollPane (example1));//JTree必须放在JScrollPane上
    69. panel.add (new JScrollPane (example2));
    70. panel.add (new JScrollPane (example3));
    71. panel.add (new JScrollPane (example4));
    72. panel.add (new JScrollPane (example5));
    73. panel.add (new JScrollPane (example6));
    74. panel.add (new JScrollPane (example7));
    75. JFrame frame = new JFrame ("JTreeDemo");
    76. frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    77. frame.setContentPane (panel);
    78. frame.pack();
    79. frame.show();
    80. }
    81. }

详解Swing中JTree组件的功能的更多相关文章

  1. 详解Android中的四大组件之一:Activity详解

    activity的生命周期 activity的四种状态 running:正在运行,处于活动状态,用户可以点击屏幕,是将activity处于栈顶的状态. paused:暂停,处于失去焦点的时候,处于pa ...

  2. 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)

    用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心.依赖注入(DI)是 ...

  3. 详解Vue中的computed和watch

    作者:小土豆 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.cn/user/2436173500265335 1. 前言 作为一名Vue ...

  4. 【转】详解C#中的反射

    原帖链接点这里:详解C#中的反射   反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子: 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内 ...

  5. 详解Webwork中Action 调用的方法

    详解Webwork中Action 调用的方法 从三方面介绍webwork action调用相关知识: 1.Webwork 获取和包装 web 参数 2.这部分框架类关系 3.DefaultAction ...

  6. java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")

    http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...

  7. 详解Python中re.sub--转载

    [背景] Python中的正则表达式方面的功能,很强大. 其中就包括re.sub,实现正则的替换. 功能很强大,所以导致用法稍微有点复杂. 所以当遇到稍微复杂的用法时候,就容易犯错. 所以此处,总结一 ...

  8. (转)详解Linux中SSH远程访问控制

    详解Linux中SSH远程访问控制 原文:http://blog.51cto.com/dengqi/1260038 SSH:是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能(使用TC ...

  9. 详解javascript中的this对象

    详解javascript中的this对象 前言 Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的 ...

随机推荐

  1. 完美解决夏天电脑cpu发烫问题

    最近有朋友跟我反馈,说苹果电脑虽然好用,但是一直有一个问题困扰着他,就是电脑散热的问题.每到夏天的时候,电脑运转之后就会发烫,用的特别的不舒服. 相信用电脑的都会有这样的感受吧,更加相信你们都用过以下 ...

  2. jQuery 处理TextArea

    jQuery 处理TextArea: $('#btn001').click(function(e) { console.log("btn001Click"); var cmt = ...

  3. Service介绍(MediaPlayer应用)

    一.Service介绍 Service类似于Windows中的服务,没有界面,只是在后台运行:而服务不能自己运行,而是需要调用Context.startService(Intent intent);或 ...

  4. Linux中的zero-copy技术

    本文是对参考文章重要部分的摘录,同时进行简单地总结. 零拷贝技术的相关背景知识 传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的 ...

  5. line-height系列(二)——对行内元素(文字、图片、兄弟元素)、块级元素设置line-height后的表现

    >原创文章,转载请注明来源! 二.对行内元素(文字.图片.兄弟元素).块级元素设置line-height后的表现 对块级元素无效,对行内元素有效.可继承给行内元素. 文字的line-height ...

  6. 关于在VI中查看BIN文件二进制值不对的问题

    通常,我们在vim中,可以使用命令 %!xxd 来查看文件对应的二进制值.但是最近发生了一个事情,查看到的BIN文件二进制值和直接用hexdump打印出来的不一样. 经过检查定位,发现是因为vimrc ...

  7. Linux上使用shell脚本查看内存情况(超实用)

    #!/bin/bashexport chknum=1 #shell搅拌存放目录(输出日志文件执行后也存于该目录)echo 3 > /wls/wls81/shellsyncwhile [ $chk ...

  8. ArcGIS API for JavaScript 4.2学习笔记[3] 官方第二章Mapping and Views概览与解释

    目录如下: 连接:第二章 Mapping and Views 根据本人体会, [这一章节主要是介绍地图(Map)和视图(View)的.] 其中,Get started with MapView(2D) ...

  9. 学习篇之String()

    // 3个特殊的引用类型:Boolean,Number,String var s1 = "some text"; ,); // me t ,); // me ,-); // so ...

  10. Java虚拟机(JVM)默认字符集详解

    Java中对字符串等进行转换字节数组时, 需要根据字符集编码来进行转换, 当不显示的指定字符集编码时(如: "测试".getBytes()), 会使用Charset.default ...