`

JTree使用经验总结

    博客分类:
  • java
UP 
阅读更多

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

    swing界面设计之JTree

    ### Swing界面设计之JTree...以上内容总结了从Swing界面设计之JTree相关的知识点,包括如何使用Spring框架和Swing开发GUI应用、数据验证模块的设计与实现、JTree的各种操作技巧以及JavaHelp 2.0的帮助系统构建方法。

    demo.rar_DEMO_日记本

    总结来说,"demo.rar_DEMO_日记本"程序展示了如何利用Java Swing的JTree组件和观察者模式来构建一个功能丰富的日记应用。通过理解这两个核心概念,开发者不仅可以学习到如何创建可视化界面来展示数据,还能掌握如何...

    java工程基础学习资料

    - 如何使用JTree来展示学生日志系统的界面。 - JTree节点的选择与信息获取方法。 - 完成一个基于JTree的日志管理系统。 #### 第八节:常用关键字总结 - **主要内容**: - 可见性修饰关键字(public、protected...

    JAVA教学(关于swing的使用)

    ### Java教学:Swing的使用详解 ...无论是初学者还是经验丰富的开发者,都可以利用Swing构建出功能齐全、美观大方的桌面应用。通过对Swing组件的学习和实践,开发者可以更好地掌握GUI编程的技巧,提高开发效率。

    Design Pattern In Java.pdf

    设计模式是软件开发中的一种最佳实践,它总结了在特定情境下解决常见问题的经验和方法,为面向对象编程提供了可复用的设计解决方案。本书是Java开发者深入理解设计模式的重要参考资料。 1. 创建型模式(Creational ...

    自己写的cmm语法分析器

    通过这个项目,你可以学习到如何从零开始构建一个完整的解析器,了解编译器前端的各个环节,同时还能掌握JTree库的使用,这对于提升编程技能和理解编译原理都大有裨益。 总的来说,编写自己的CMM语法分析器是一个既...

    Java课程实训项目及实训报告

    此外,Swing还提供了JTable、JTree等高级组件,帮助学生掌握数据展示和交互的技巧。 Java Web项目则是Java课程实训的另一个重要组成部分,涵盖了Servlet、JSP(JavaServer Pages)、JDBC(Java Database ...

    java教程GUI组件

    根据给定的信息,本文将...无论是对于初学者还是有经验的开发者来说,掌握Java GUI的基本概念都是非常有用的,它可以帮助你构建出更加美观、易用的桌面应用程序。希望本文能够帮助读者更好地理解和使用Java GUI组件。

    jdk-6u45-windows-x64.zip

    4. **Swing增强**:包括新的LookAndFeel、可定制的JTable和JTree组件,以及更高效的事件处理机制。 5. **XML处理**:更新了DOM、SAX和StAX解析器,增强了XPath和XSLT的支持。 6. **Java Web Start和Applet的改进**...

    java swing权威指南

    - **总结**:本书全面介绍了 Java Swing 的各个方面,不仅适合初学者入门学习,也适合有经验的开发者深入探索。 - **展望**:虽然近年来 JavaFX 和其他现代 GUI 框架逐渐兴起,但 Swing 仍然因其成熟稳定、功能...

    java swing

    总结起来,Java Swing 是一个强大的GUI工具包,它为开发者提供了构建复杂桌面应用程序所需的所有元素,并且具有高度的可定制性和跨平台性。无论你是初学者还是有经验的开发者,都能通过Java Swing 创建出功能丰富、...

    java界面组件139个案例

    总结来说,"java界面组件139个案例"涵盖了Java GUI开发的各个方面,无论是初学者还是有经验的开发者,都能从中获益。通过这些案例,你将能够创建功能完备、用户友好的Java应用程序,并进一步提升自己的编程技能。

    Java图形界面开发-awt、swing、swt

    ### Java图形界面开发知识点 #### 1. 概述与发展历程 ...无论是初学者还是有经验的开发者,都应该熟悉这些工具包的特点和应用场景,以便能够根据项目需求选择最合适的工具来构建高质量的图形界面应用程序。

    SmartFileManagerUI

    总结,"SmartFileManagerUI"项目是Java技术在文件管理领域的一个应用实例,它展示了如何利用Java的图形库和设计模式构建一个用户友好的文件管理系统。这个项目不仅提供了实际的编程经验,也为学习者提供了一次深入...

Global site tag (gtag.js) - Google Analytics