JTree用法及JTree使用经验总结(吐血推荐)

树形菜单、树形结构初学习 我们一般会需要将平铺的菜单数据列表转换为树形结构展示的菜单数据,这句话的意思是将数据库中的菜单表转化为树形结构的菜单后端接口方法并通过业务层具体实现其逻辑,以便前端调用和展示。在这个示例中,我们创建了一个简单的树形菜单,包含一个文件菜单和四个菜单项:新建、打开、保存和退出。总的来说,树形结构是一种通用的数据组织方式,而树形菜单是一种特定应用场景下基于树形结构设计的用户界面元素。这只是一个简单的示例,实际的树形菜单可能会包含更多的菜单和菜单项,并且可能需要根据具体需求进行定制。树形结构是一种数据结构,它由。 阅读详情

 转载 http://blog.youkuaiyun.com/kukuwuwu/archive/2007/07/31/1718479.aspx

 

 

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);
           }
       }
   }

 

Swing JTree的使用及常用方法、常用功能实现 JTree的使用及常用方法、实现本地文件树、实现下拉列表树、节点的拖拽功能实现等 阅读详情

相关推荐

深入理解EtherCAT状态机:从IGH代码看伺服电机如何从‘上电’到‘使能’

本文深入解析EtherCAT状态机的工作原理,重点探讨伺服电机从'上电'到'使能'的状态转换过程。通过分析状态字(Status Word)和控制字(Control Word)的交互机制,结合IGH代码实例,揭示DS402状态机的核心逻辑,帮助工程师解决60%以上的伺服控制问题,提升EtherCAT网络调试效率。

weixin_42549037的博客 289

Java Swing桌面应用开发-组件-树形结构(JTree)

1:硬编码方式创建Tree 代码实现: package Swing; /** * 硬编码树型结构:Tree型结构不能改变 * */ import java.awt.Container; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax....

hujyhfwfh2的博客 2970

透传产品上报AEP平台数据流程

1. 什么是数据透传 数据透传:指的是在通讯中不管传输的业务内容如何,只负责将传输的内容由源地址传输到目的地址,而不对业务数据内容做任何改变。 这篇文章描述了如何将一台NB设备通过透传方式将数据传输到AEP平台,再通过数据订阅的方式获取到这些数据。 2. 步骤 2.1 设备在AEP平台创建 AEP:https://dm.ctwing.cn/ 新建产品 添加设备 根据模组的15位IMEI添加设备 开启内网穿透 具体可参照我的这篇博客:内网穿透-如何进行本地数据调试 设置数据推送

qq_42265394的博客 2297

swing_树_JTree概述

swing_树_JTree概述以及如何创建树和对结点的修改

qq_52629349的博客 677

OpenBmc开发11:添加传感器(I2C)

1 查看传感器信息 通过qemu以本地端口映射方式运行编译后的镜像,访问bmcweb页面的网址是:https://localhost:2443/,如果想用IP地址启动请参考:openbmc开发4:启动运行编译镜像。(这里以网桥方式启动,以ip地址方式访问BMC) 输入用户名和密码,密码是:0penBmc(第一个是数字)。 选择Health,然后点击Sensor,可以看到传感器信息。 2 查看传感器配置文件 进入meta-live/meta-test/recipes-phosphor/...

master 1万+

Arm Neoverse CMN-700 SLC内存系统与缓存分区技术解析

现代处理器架构中,缓存一致性协议与内存子系统设计直接影响系统性能。Arm Neoverse CMN-700采用的SLC(System Level Cache)通过16-way组相联设计实现高效数据缓存,其物理地址索引机制支持灵活的way分区配置。在软件可配置内存(OCM)模式下,SLC可作为独立内存空间使用,通过寄存器控制实现模式切换与区域锁定。缓存分区技术则通过请求源分类和way-based分配策略,满足实时性任务与吞吐量场景的不同需求。这些技术在5G基站、边缘计算等低延迟场景中具有重要应用价值,特别是C

weixin_30263073的博客 619

JTree的用法,[吐血推荐]

[code="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...

hpjianhua的专栏 171

【技术实战】SeaTunnel 实现 HTTP 到 Doris 数据同步的配置优化与问题解决

本文分享了使用SeaTunnel实现HTTP数据源到Doris数仓同步的实战经验。详细解析了从环境搭建、核心配置到生产部署的全流程,重点针对数据类型映射、分页拉取、依赖冲突等典型问题提供了解决方案,并给出了连接参数调优、错误处理等进阶优化技巧,帮助开发者构建稳定高效的数据同步管道。

gan8painter的博客 754

Java-swing树状图(JTree)

登录界面 主界面 添加界面: 代码: 1、af-swing为自己定义的布局(封装了),下方提供下载链接..... 2、数据来源于place.txt,这个可以随意更改(一行代表一个数据) 3、用到的技术:JTree,背景图片的绘制,文件的读取以及自定义解析 4、功能,左上角当前用户的显示,左下角当前时间的显示及实时更新,添加功能,查询功能,城市信息的显示功能,数据...

给你更好的 2924

OpenClaw 快速安装与本地应用实战 —— 每一步都有截图加详细说明,本地AI助手,让打工人也有下属

《OpenClaw 2026开源智能体框架10分钟快速部署指南》摘要:本文提供OpenClaw最新版全平台部署方案,重点解决三大核心问题:1)环境配置优化,通过一键脚本实现3-8分钟快速安装(含国内镜像加速方案);2)初始化配置详解,包含大模型绑定(智普AI/本地模型)与5个高频技能安装;3)实战演示文件自动整理任务。同时总结6类常见故障解决方案,涵盖权限、端口占用等典型问题,确保用户从安装到首个自动化任务落地全程无障碍。特别强调Windows需管理员权限、禁用中文路径等关键注意事项,实现"安装即

weixin_43538316的博客 809

华为海思:大小海思的双轮驱动战略分析

大海思的定位清晰明确,即专注于为华为内部提供高性能、高集成度的芯片解决方案,以支持华为终端、服务器等业务的快速发展。小海思的产品线广泛,涵盖了广域物联、短距物联、手机穿戴、显示交互、智慧视觉、智慧媒体、MCU、模拟以及光模块等多个领域。通过提供多样化的芯片解决方案,小海思旨在满足外部客户的不同需求,拓展华为海思在芯片市场的份额和影响力。大海思的产品布局主要围绕华为的内部需求展开。在智能手机应用处理器方面,大海思的麒麟系列芯片已经成为华为手机的标志性产品,以其出色的性能和能效比赢得了市场的广泛认可。

dream it possible 2924

JTree如何选中一个某个节点?

概述:JTree如何用代码选中一个节点?点击按钮选中某个节点直接上代码:import java.awt.FlowLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Enumeration; import ...

往前的娘娘 3211

初识数据之特征选择

【代码】初识数据之特征选择。

M_inherit的博客 1136

jTree的遍历所有节点,默认选择节点,默认展开节点

jtree遍历所有节点:            public static void visitAllNodes2(JTree tree) {       TreeNode root = (TreeNode)tree.getModel().getRoot();//取得tree的根节点       visitAllNodes(root);   }     public static ...

jhhuang4836的专栏 2827

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【Java学习笔记】53:JTree的使用(新选中事件和结点双击事件)

JTree是Swing里的一种树形结构,感觉有些场合能起到意想不到的作用。 树结点新选中的事件 说是”新选中”而不是”选中”或”单击”,因为监听器实际上是在看选中者的某个值有没有改变,连续的选中不会触发这件事,单击也仅仅是”选中”的一条不必要的途径,这些都不会产生TreeSelectionEvent对象。 简述 选中事件的监听比较方便,不能对每个结点注册监听器,只能对整棵树注册一个

大桔骑士的学习笔记 5762

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jstree获取当前选中节点和选中指定节点(select)

1. 获取jstree当前选中节点 function getSelectNodeId() {     var treeNode = $('#treeSource').jstree(true).get_selected(true)[0]; //获取所有选中的节点对象     var nodeId = treeNode.original.id;     return nodeId; } 2. 选...

lebron3v的专栏 2万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

JavaSwing创建一颗简单的树JTree 一

创建树组件,有两种方式 静态创建树形组件 动态创建树形组件 树组件,和表格组件、文本区组件是一样的,都没有滚动条,需要放到JScrollPane中展示全部数据 设置字体 setFont(Font font) 你只需要查看一下其源代码就知道怎么回事了 为一颗树添加新节点的核心代码,这3句,是关键,对于修改节点的关键 TreeSelectionListener: 用来监听用户选择节点的操作,一旦用户选择某个节点,监听器就会立刻捕获到用户选择的动作, 并且知道选择的是哪个节点,从而计算出从被选中的节点到根

这里是菠萝味菠萝啤的博客 649

java treenode 遍历_java – 遍历多级JTree的所有节点

我有一个带有DefaultTreeModel的JTree.我需要到达它的每个节点.想象一下,我有这棵树:[A]|-[B]|-[C]|-[D]| |-[E]| |-[F]| |-[G]| |-[H]|-[I]|-[J]|-[K]我需要遍历它并打印出来:---[A]--->[B]>[C]>---[D]--->>---[E]--->>&...

weixin_31554959的博客 1180

java 动态tree_java树 JTree实例(可动态添加节点)

[java]代码库import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.tree.*;class Branch {DefaultMutableTreeNode r;// DefaultMutableTreeNode是树的数据结构中的通用节点,节点也可以有多个子节点。public Branc...

weixin_31901801的博客 796

java 树形控件使用_JTree树控件的使用

树和节点的基本概念树可以用图形的方式显示众多的节点以及它们之间的关系,最常见的树的例子就是目录树。所有组成树的元素都成为节点(Node),一棵树的最顶层的节点称为根节点,如Program;而没有子节点的节点成为叶子节点,如domain。在层次结构中,上层的节点是下层节点的父节点,而下层节点是上层节点的子节点,如图:Program是C# Programs和Programs的父节点;FileBatch...

weixin_36366239的博客 689

java 把树放入jtree_Java JTree 实现两棵树之间节点拖拽

程序效果图:用到的图片:-----------------------------NodeData.java-----------------------------------package treeTest;import java.awt.Component;import javax.swing.ImageIcon;import javax.swing.JTree;import javax.s...

weixin_39521068的博客 383
上一篇: 建造者模式(Builder Pattern)
下一篇: JFileChooser用法
gl7788521
博客等级 码龄17年 5粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值