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.  }  
  • 相关阅读:
    快速编辑里指定默认值
    Odoo domain 中的 like, ilike, =like, =ilike 举例说明【转】
    odoo报表条码无法显示解决[转]
    ubuntu 安装 wkhtmltopdf 的方法
    解决Odoo日期(时间)无效的问题 [转]
    ShareSDK演示
    黑客帝国数字矩阵特效做法
    lua中实现倒计时
    Lua中用Split函数分割字符串
    lua封装的位运算
  • 原文地址:https://www.cnblogs.com/lxoy/p/4982532.html
Copyright © 2011-2022 走看看