详解Swing中JTree组件的功能

开发 后端
本文介绍JTree组件的功能来自树的概念,树有分支和叶子。您在 Windows 中使用 IE 浏览器时,可能非常熟悉这个概念。

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

【编辑推荐】

  1. Swing SWT集成框架介绍
  2. 浅析Swing实现MDI的方法
  3. 概述Swing中的JApplet和JFrame
  4. 浅谈Swing中的Metal观感
  5. Swing动态刷新常用代码
责任编辑:佚名 来源: 电子工业出版社
相关推荐

2009-07-10 18:06:59

JTree Swing

2012-01-17 14:05:29

JavaSwing

2009-07-10 12:30:12

Swing组件

2009-07-17 16:19:16

Swing核心组件

2009-07-10 10:19:57

JFormattedTSwing

2009-07-10 14:58:13

JLabel组件JFC和Swing

2009-07-16 10:11:06

渲染器RendererSwing组件

2009-07-14 17:21:42

Swing组件

2009-07-15 11:02:32

Swing组件

2009-07-10 16:29:32

Swing组件

2009-07-15 13:06:38

Swing组件

2009-07-17 12:54:13

2009-07-10 13:20:37

Swing容器组件

2009-07-10 10:08:59

Spinner ModSwing组件

2009-07-17 11:13:46

AWT和SwingSwing组件

2009-07-17 14:38:51

轻量级Swing组件

2009-07-10 17:03:17

AWT组件Swing组件

2009-07-14 18:05:28

轻量级Swing组件

2009-07-17 10:31:18

paint方法Swing组件

2014-11-06 10:46:48

CloudFoundr
点赞
收藏

51CTO技术栈公众号