`

JTree总结

    博客分类:
  • java
阅读更多
import  java.awt.Dimension;
import  java.awt.Color;
import  javax.swing.JFrame;
import  javax.swing.JPanel;
import  javax.swing.JScrollPane;
import  javax.swing.JTree;
import  javax.swing.BoxLayout;
import  javax.swing.tree.TreePath;
import  javax.swing.tree.DefaultMutableTreeNode;
import  javax.swing.tree.DefaultTreeModel;
/*
JTree的构造函数:
JTree()
JTree(Hashtable value)
JTree(Object[] value)//只有这个构造函数可以创建多个根结点
JTree(TreeModel newModel)
JTree(TreeNode root)
JTree(TreeNode root, boolean asksAllowsChildren)
JTree(Vector value)
*/
public   class  JTreeDemo
{
  public   static   void  main (String[] args)
 {
   // 构造函数:JTree()
  JTree example1  =   new  JTree(); 
   // 构造函数:JTree(Object[] value)
  Object[] letters =  { " a " ,  " b " ,  " c " ,  " d " ,  " e " };
  JTree example2  =   new  JTree (letters);
   // 构造函数:JTree(TreeNode root)(TreeNode空)
   // 用空结点创建树
  DefaultMutableTreeNode node1  =   new  DefaultMutableTreeNode(); // 定义树结点
  JTree example3  =   new  JTree (node1); // 用此树结点做参数调用 JTree的构造函数创建含有一个根结点的树
   // 构造函数:JTree(TreeNode root)(同上,只是TreeNode非空)
   // 用一个根结点创建树
  DefaultMutableTreeNode node2  =   new  DefaultMutableTreeNode( " Color " );
  JTree example4  =   new  JTree (node2); // 结点不可以颜色,默认为白面黑字
  example4.setBackground (Color.lightGray);
   // 构造函数:JTree(TreeNode root, boolean asksAllowsChildren)(同上,只是TreeNode又有不同)
   // 使用DefaultMutableTreeNode类先用一个根结点创建树,设置为可添加孩子结点,再添加孩子结点
  DefaultMutableTreeNode color  =   new  DefaultMutableTreeNode( " Color " ,  true );
  DefaultMutableTreeNode gray  =   new  DefaultMutableTreeNode ( " Gray " );
  color.add (gray);
  color.add ( new  DefaultMutableTreeNode ( " Red " ));
  gray.add ( new  DefaultMutableTreeNode ( " Lightgray " ));
  gray.add ( new  DefaultMutableTreeNode ( " Darkgray " ));
  color.add ( new  DefaultMutableTreeNode ( " Green " ));
  JTree example5  =   new  JTree (color); 
   // 构造函数:JTree(TreeNode root)(同上,只是TreeNode非空)
   // 通过逐个添加结点创建树
  DefaultMutableTreeNode biology  =   new  DefaultMutableTreeNode ( " Biology " );
  DefaultMutableTreeNode animal  =   new  DefaultMutableTreeNode ( " Animal " );
  DefaultMutableTreeNode mammal  =   new  DefaultMutableTreeNode ( " Mammal " );
  DefaultMutableTreeNode horse  =   new  DefaultMutableTreeNode ( " Horse " );
  mammal.add (horse);
  animal.add (mammal);
  biology.add (animal);
  JTree example6  =   new  JTree (biology);
  horse.isLeaf();
  horse.isRoot();
   // 构造函数:JTree(TreeModel newModel)
   // 用DefaultMutableTreeNodel类定义一个结点再用这个结点做参数定义一个用DefaultTreeMode
   // 创建一个树的模型,再用JTree的构造函数创建一个树
 
  DefaultMutableTreeNode root  =   new  DefaultMutableTreeNode ( " Root1 " );
  DefaultMutableTreeNode child1  =   new  DefaultMutableTreeNode ( " Child1 " );
  DefaultMutableTreeNode child11  =   new  DefaultMutableTreeNode ( " Child11 " );
  DefaultMutableTreeNode child111  =   new  DefaultMutableTreeNode ( " Child111 " );
  root.add (child1); child1.add (child11); child11.add (child111); 
  DefaultTreeModel model  =   new  DefaultTreeModel (root); 
  JTree example7  =   new  JTree (model);
  JPanel panel  =   new  JPanel();
  panel.setLayout ( new  BoxLayout (panel, BoxLayout.X_AXIS));
  panel.setPreferredSize ( new  Dimension ( 700 ,  400 ));
  panel.add ( new  JScrollPane (example1));// JTree必须放在JScrollPane上
  panel.add ( new  JScrollPane (example2));
  panel.add ( new  JScrollPane (example3));
  panel.add ( new  JScrollPane (example4));
  panel.add ( new  JScrollPane (example5));
  panel.add ( new  JScrollPane (example6));
  panel.add ( new  JScrollPane (example7));
  JFrame frame  =   new  JFrame ( " JTreeDemo " );
  frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
  frame.setContentPane (panel);
  frame.pack();
  frame.show();
 }
} ××××××××××××××××××××××××××××××××××××××××××××××

在实际开发过程中会经常使用JTree组件,平时会遇到这样或那样的问题,在此将偶得一点经验写下来,与大家共享,希望对大家有所帮助。

private JTree jtNetDevice;//数组件申明
private JScrollPane jspTree;//滚动面板申明
1、初始化
    DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("root");
    jtNetDevice = new JTree(rootNode);
    jtNetDevice.setAutoscrolls(true);
    getTreeSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);//设置单选模式
    jspTree = new JScrollPane();
    jspTree.getViewport().add(jtNetDevice, null);

2、三个经常使用的取值函数
  private DefaultTreeModel getTreeModel(){
    return (DefaultTreeModel)jtNetDevice.getModel();
  }

  private DefaultMutableTreeNode getRootNode(){
    return (DefaultMutableTreeNode)getTreeModel().getRoot();
  } 
  private TreeSelectionModel getTreeSelectionModel(){
    return jtNetDevice.getSelectionModel();
  } 

3、根据node得到path:
  TreePath visiblePath = new TreePath(getTreeModel().getPathToRoot(node));

4、根据Path展开到该节点
  jtNetDevice.makeVisible(visiblePath);

5、根据path设定该节点选定
  jtNetDevice.setSelectionPath(visiblePath);

6、选中节点的方法
  首先,根据节点得到树路径,其中chosen为需要选中的节点
  TreePath visiblePath = new TreePath( ( (DefaultTreeModel) jtNetDevice.getModel()).
                                        getPathToRoot(chosen));
  然后根据Path选中该节点
  jtNetDevice.setSelectionPath(visiblePath);

7、滚动到可见位置
  jtNetDevice.scrollPathToVisible(visiblePath);

8、给JTree添加右键弹出菜单
  void jtNetDevice_mouseReleased(MouseEvent e) {
    if (e.isPopupTrigger()) {
      jPopupMenu1.show(e.getComponent(), e.getX(), e.getY());//弹出右键菜单
    }
  }

9、关于JTree的展开
   // If expand is true, expands all nodes in the tree.
   // Otherwise, collapses all nodes in the tree.
   public void expandAll(JTree tree, boolean expand) {
       TreeNode root = (TreeNode)tree.getModel().getRoot();  
       // Traverse tree from root
       expandAll(tree, new TreePath(root), expand);
   }
   private void expandAll(JTree tree, TreePath parent, boolean expand) {
       // Traverse children
       TreeNode node = (TreeNode)parent.getLastPathComponent();
       if (node.getChildCount() >= 0) {
           for (Enumeration e=node.children(); e.hasMoreElements(); ) {
               TreeNode n = (TreeNode)e.nextElement();
               TreePath path = parent.pathByAddingChild(n);
               expandAll(tree, path, expand);
           }
       }  
       // Expansion or collapse must be done bottom-up
       if (expand) {
           tree.expandPath(parent);
       } else {
           tree.collapsePath(parent);
       }
   }

10、如何遍历JTree
   // 创建树
   JTree tree = new JTree();  
   // 添加树节点......  
   // 遍历所有节点
   visitAllNodes(tree);  
   // 仅遍历展开的节点
   visitAllExpandedNodes(tree);  
   // Traverse all nodes in tree
   public void visitAllNodes(JTree tree) {
       TreeNode root = (TreeNode)tree.getModel().getRoot();
       visitAllNodes(root);
   }
   public void visitAllNodes(TreeNode node) {
       // node is visited exactly once
       process(node);  
       if (node.getChildCount() >= 0) {
           for (Enumeration e=node.children(); e.hasMoreElements(); ) {
               TreeNode n = (TreeNode)e.nextElement();
               visitAllNodes(n);
           }
       }
   }  
   // Traverse all expanded nodes in tree
   public void visitAllExpandedNodes(JTree tree) {
       TreeNode root = (TreeNode)tree.getModel().getRoot();
       visitAllExpandedNodes(tree, new TreePath(root));
   }
   public void visitAllExpandedNodes(JTree tree, TreePath parent) {
       // Return if node is not expanded
       if (!tree.isVisible(parent)) {
           return;
       }
  
       // node is visible and is visited exactly once
       TreeNode node = (TreeNode)parent.getLastPathComponent();
       process(node);  
       // Visit all children
       if (node.getChildCount() >= 0) {
           for (Enumeration e=node.children(); e.hasMoreElements(); ) {
               TreeNode n = (TreeNode)e.nextElement();
               TreePath path = parent.pathByAddingChild(n);
               visitAllExpandedNodes(tree, path);
           }
       }
   }

 

分享到:
评论

相关推荐

    JTree用法及JTree使用经验总结及源码

    JTree用法及JTree使用经验总结(吐血推荐) 1、初始化 2、三个经常使用的取值函数 3、根据node得到path:4、根据Path展开到该节点 5、根据path设定该节点选定 6、选中节点的方法 7、滚动到可见位置 8、给JTree添加右键...

    如何使用JTree,JTree使用方法

    #### 总结 通过上述示例,我们可以看到`JTree`的灵活性及其在构建层次化数据结构方面的能力。无论是在构建简单的树还是复杂的多层结构时,`JTree`都能提供强大的支持。掌握`JTree`的基本用法对于开发需要展示层级...

    JTree

    **JTree 深度解析** ...总结,`JTree` 是Java GUI编程中的一个关键组件,它为呈现和操作层次数据提供了便利。理解其核心概念、特性和使用方法,可以帮助开发者更好地设计和实现具有动态更新和交互功能的应用程序。

    java组件之jtree使用

    #### 五、总结 通过本文的介绍,我们可以看到`JTree`是一个功能强大的Swing组件,能够帮助开发者轻松地在Java应用程序中展示层次化的数据。无论是构建复杂的组织结构还是简单的文件系统视图,`JTree`都能够胜任。...

    java Swing JTree的教程实例

    总结来说,Java Swing的JTree组件是展示和操作层次数据的关键工具。掌握它的创建、显示、节点操作和编辑功能对于任何Java GUI开发者来说都是必要的。通过实例学习和实践,可以更好地理解和应用JTree在实际项目中的...

    JTree的用法

    #### 六、总结 `JTree` 提供了一个灵活的方式来展示和管理层次结构的数据。通过合理的使用节点类型和事件监听器,可以创建出功能强大的用户界面。对于初学者来说,掌握 `JTree` 的基本使用方法是非常重要的,这有助...

    JTree组件资料

    JTree的使用经验与总结 - **性能优化**: 当树结构非常大时,使用懒加载策略以提高性能。 - **自定义节点**: 可以通过继承`DefaultMutableTreeNode`并重写相关方法来自定义节点行为。 - **节点遍历**: 能够使用`...

    JTree控件的使用

    总结来说,`JTree`控件在Java Swing中用于创建和管理树形数据视图,提供了丰富的构造方法、数据模型、渲染器和事件监听机制,使得开发者可以灵活地构建和定制树结构,以满足各种用户界面的需求。在实际开发中,利用...

    JTree(节点带有checkbox)代码实例

    总结来说,`JTree`结合复选框在Java Swing应用中提供了强大的交互性,让用户能够方便地选择和操作树形数据结构中的多个项。通过自定义`CellRenderer`和监听事件,我们可以进一步定制和扩展这种功能,以满足具体项目...

    jtree的详细使用说明

    #### 五、总结 `JTree` 是 Java Swing 中一个非常强大的组件,它能够帮助开发者构建复杂的用户界面。通过本篇介绍,我们不仅了解了如何使用 `JTree` 的基本构造方法来创建树形结构,还学习了如何使用 `Hashtable` ...

    JTree_Example.rar_jtree

    总结来说,`JTree_Example`是一个演示如何在Java Swing应用中使用`JTree`组件的实例,涵盖了创建树结构、设置模型、添加到GUI以及可能的用户交互处理等核心概念。对于学习Swing和图形界面编程的初学者,这是一个很好...

    xml文档分析--用jtree实现图形化

    总结一下,这个项目是关于使用Java进行XML文档分析的实践。它涉及到以下几个关键知识点: 1. JAXP DOM解析:通过`DocumentBuilderFactory`和`DocumentBuilder`加载并解析XML文档。 2. Java Swing的JTree:利用JTree...

    JTree2.0 目录树

    总结来说,JTree2.0是一个强大的Java Swing组件,用于构建和展示目录树结构。通过理解其基本使用、事件监听、外观定制以及动态数据加载,开发者可以创建出功能丰富的用户界面,满足各种项目需求。在实际应用中,结合...

    (java) JTree控件的拖拽,拖动

    总结起来,实现`JTree`控件的拖拽功能涉及到`DragSource`、`DropTarget`的配置,以及`Transferable`的使用。通过对拖放事件的监听和处理,我们可以让用户自由地调整树形结构,提升应用程序的交互性和易用性。这个...

    JTree相关方法及demo实例

    本文将总结JTree的一些常用方法,并通过实例来演示如何使用这些方法,为初学者提供学习参考。 1. JTree组件常用方法 JTree组件提供了多种方法来实现用户界面的定制和树形数据的管理,以下是一些常用的方法: - `...

    swing界面设计之JTree

    ### Swing界面设计之JTree知识点总结 #### (一) Spring 开发 Swing GUI 简介——依赖注入和富客户端 **关于本教程** 本节主要介绍如何利用Spring框架结合Swing来开发图形用户界面(GUI),并通过依赖注入来增强...

    Login_Java.rar_The Given_jtree

    总结,JTree在Java Swing中扮演着重要的角色,它提供了直观且用户友好的界面元素,使得复杂的数据结构得以有序展示。通过灵活的模型、丰富的事件处理和可定制的外观,开发者可以轻松地构建出满足各种需求的树形界面...

    用Hashtable构建Jtree,使各节点按输入顺序显示

    总结来说,这个例子展示了如何通过自定义数据结构(`MyHashtable`)来解决`JTree`节点顺序问题。`MyHashtable`通过维护一个额外的列表来记录键的插入顺序,从而确保`JTree`的构造函数在构建树形结构时能按照输入顺序...

    Swing展示的文件系统树

    总结起来,使用`JTree`组件在Swing中展示文件系统树,不仅涉及`JTree`、`DefaultTreeModel`、`TreeNode`和`ImageIcon`的使用,还涵盖了事件监听、自定义渲染和编辑行为等多个方面。通过熟练掌握这些知识,开发者可以...

Global site tag (gtag.js) - Google Analytics