zoukankan      html  css  js  c++  java
  • 详解Swing中JTree组件的功能

    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.  }  
  • 相关阅读:
    Windows Server 2012配置开机启动项
    Windows Server 2019 SSH Server
    NOIP2017 senior A 模拟赛 7.7 T1 棋盘
    Noip 2015 senior 复赛 Day2 子串
    Noip 2015 senior复赛 题解
    Noip 2014 senior Day2 解方程(equation)
    Noip 2014 senior Day2 寻找道路(road)
    Noip 2014 senior Day2 无线网络发射器选址(wireless)
    Noip2014senior复赛 飞扬的小鸟
    Noip 2014 senior 复赛 联合权值(link)
  • 原文地址:https://www.cnblogs.com/lxoy/p/4982532.html
Copyright © 2011-2022 走看看