`
daimojingdeyu
  • 浏览: 272050 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

JTree的使用方法

阅读更多
原文地址:http://www.blogjava.net/wangxinsh55/archive/2006/04/04/39219.html
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的使用 JTree的使用

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

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

    JTree相关方法及demo实例

    jtree常用方法及实例 总结了jtree比较常用的一些方法,以及一些常见实例。相信对于新手学习jtree很有帮助。

    JTree用法大全 swing java

    JTree用法大全,各种使用方法demo,介绍,并附注释。

    JTree 树形菜单插件包.rar

    加入这个功能之后,使之在opera下也能正常使用。个人感觉有些混乱。不过,现在没有时间整理。  一、重要属性:  1,picPath:图片路径,默认是为”JTree/”  2,clickItem:当前树中,被点击的节点。clickItem是...

    java swing-jtree的用法

    JTree上的每一个节点就代表一个TreeNode对象,TreeNode本身是一个Interface,里面定义了7个有关节点的方法,例如判断是否 为树叶节点、有几个子节点(getChildCount())、父节点为何(getparent())等等、这些方法的定义...

    swing界面设计之JTree

    (四) JTree的使用方法 57 JTreeDemo.java源程序 57 经验汇总 60 1. 初始化 60 2. 三个经常使用的取值函数 60 3. 根据node得到path: 60 4. 根据Path展开到该节点 60 5. 根据path设定该节点选定 61 6. 选中节点的方法...

    jtree 动态加载 ActiveMQ 返回的消息

    于是我想到的网上说的动态加栽树结构的方法,试了试还不错!每次树要加栽的时候先显示“正在加载...”,当结构从ActiveMQ进行返回的时候,再重新渲染此树。例子我打包传到我的资源里面。需要的下

    Java漂亮的树形菜单制作实例(源码).rar

    Java漂亮的树形菜单制作实例(源码),森林状的关系图,文本域,用于显示点击的节点名称,使用了JTree,可以看作是一个jTree的用法演示实例。树形菜单应用广泛,这个Tree制作漂亮,相信会让很多朋友从中学习到实现的...

    Java Swing中的表格(JTable)和树(JTree)组件使用实例

    主要介绍了Java Swing中的表格(JTable)和树(JTree)组件使用实例,本文同时讲解了表格和树的基本概念、常用方法、代码实例,需要的朋友可以参考下

    Jtable和JTree的写法示例代码

    主要介绍了Jtable和JTree的基本概念,常用构造方法,以及二者的通用写法,需要的朋友可以了解下。

    Exa2-文本编辑器的设计

    初始化界面左边的JTree,设置它的根节点为“正在编辑的文件”,使用DefaultMutableTreeNode的add方法为根节点添加一个子节点,表示编辑器初始状态时时新建一个文件。JTree的setEditable方法设置树不可编辑。 初始化...

    CMM.rar_BNF 文法_bnf分析_bnf语法分析_cminus_cminus 语法

    这个语法分析器用到的是自顶向下的递归调用的方法...然后调用它的方法用这个返回的节点继续构造,最后语法分析完成后会返回一棵完全构造好了的树节点,然后将这个树节点作为根节点生成一个树控件JTree显示到窗体程序上

    Java开发技术大全 电子版

    14.8.10树(JTree)使用示例518 14.8.11菜单使用示例523 14.9布局管理527 14.9.1流式布局(FlowLayout)回顾527 14.9.2边框布局(BorderLayout)使用示例528 14.9.3网格布局(GridLayout)使用示例529 14.9.4...

    疯狂JAVA讲义

    4.4.3 使用return结束方法 87 4.5 数组类型 87 4.5.1 理解数组:数组也是一种类型 88 学生提问:int[]是一种类型吗?怎么使用这种类型呢? 88 4.5.2 定义数组 88 4.5.3 数组的初始化 89 学生提问:能不能只...

    MJTreeTable 1.0

    使用MJTreeTable跟使用jtree一样方便,因为我在写的时候就考虑到了不仅仅是要供我一个人使用。 压缩文件中附带简单示例程序,你会发现一切是多么的简单。 时间仓促,只是treetable的简单实现,希望对有需要...

    javaSE代码实例

    16.4.9 防止错误的使用wait、notify、notifyAll方法 371 16.5 获取当前正在运行的线程 372 16.6 volatile关键字的含义与使用 372 16.7 小结 373 第17章 高级线程开发 374 17.1 线程池的使用 374 17.1.1...

    Java开发技术大全(500个源代码).

    DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....

    Java数据库编程宝典2

    10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性...

    Java数据库编程宝典4

    10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性...

Global site tag (gtag.js) - Google Analytics