`
suibian1243
  • 浏览: 44519 次
  • 性别: Icon_minigender_1
  • 来自: 济宁
最近访客 更多访客>>
社区版块
存档分类
最新评论

JTree学习

阅读更多
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目录树,学习目录树的同学可以参考参考,js实现的,可以动态的无限添加目录树节点,非常方便

    java代码-使用java解决JTree JSON的源代码

    java代码-使用java解决JTree JSON的源代码 ——学习参考资料:仅用于个人学习使用!

    jquery树jtree

    jwuery树jtree,此代码可以帮助学习java的同学更好的学习

    java代码-使用java解决XML2JTree的源代码

    java代码-使用java解决XML2JTree的源代码 ——学习参考资料:仅用于个人学习使用!

    java代码-使用java解决JTree访问XML的源代码

    java代码-使用java解决JTree访问XML的源代码 ——学习参考资料:仅用于个人学习使用!

    asp.net2.0中使用jquery,jqdatagrid,jtree,json

    对jtree也实现了一个小例子. 想学习jqdatagrid的请下载,包您满意! 本人觉得网上提供jqdatagrid资料的都不如我这个全面实用.绝不是骗分的. 我弄明白jqdatagrid花了好多时间,就想帮助其他人节省时间!

    swing界面设计之JTree

    (十七) Swing 学习笔记 108 Swing API 包括18个公共包: 108 例程1.1 HelloWorldSwing.java 109 例程2.2 HelloWorldJFrame.java 110 (十八) 动态加载文件树的java程序 111 FileSystemTree.java源代码 112 //内部类 ...

    JTree相关方法及demo实例

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

    JTree示例

    学习JTree的基础示例

    ACCP体系(JTree)

    jbuild Jtree, 用法  用Jbulid 做的 小项目 可供初学者学习用

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

    一个关于用jaxp接口中的dom对xml文档进行提取分析修改的小程序,提供了树型目录显示xml文档内容。用于学习jaxp和java图形界面开发。有问题大家一起探讨哈!

    java cs编程 jtree jtable file dom xml GridBagPanel

    j2se 工具类,学习类,jtree jtable file dom GridBagPanel

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

    树形菜单应用广泛,这个Tree制作漂亮,相信会让很多朋友从中学习到实现的方法,效果如演示截图所示。下面是相关的代码片段:  DefaultMutableTreeNode root = new DefaultMutableTreeNode("设置"); //生成根节点  ...

    Jtree03

    :seedling: 我目前正在学习NestJS和React 。 :jack-o-lantern: 谢谢! :briefcase: 招贤纳士类型日期内容组织合同工2020.10〜2021. 4 后端开发人员玛琅蜂蜜大学本科2015. 3〜2021. 2 计算机科学系庆尚国立大学 :...

    swing学习资料和ibatits

    swing学习资料和ibatits,有jtable,jtree,swing,awt,swt比较

    学习文字学习教程

    这是一个swing学习知道手册,包含layout(布局)、窗口、布局约束、各种swing自己的组件(jframe、jcheckbox、jcomcobox、jtable、jtree等),能让你对swing有个详细的了解

    jsTree大集合

    java 开发之 jTree树形代码大集合,包含各种树的美化,样式,操作等代码demo,适合学习开发,稍作修改即可用于自己的项目

    固定资产管理系统完整版(原创j2se版)

    6、资产信息浏览和查询(利用JTable,JTree) 7、资产类别管理(增,删) 8、系统配置功能(文件SysCongfig.ini) 9、综合查询和报表打印功能(支持将JTable数据另存为.xls格式) (*新加*) 这是我毕业设计做得东西,虽然现在...

    Java Swing JRadioButton单选按钮具体使用

    主要介绍了Java Swing JRadioButton单选按钮具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Global site tag (gtag.js) - Google Analytics