1. package tree;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.Font;
  6. import java.awt.Image;
  7.  
  8. import javax.swing.ImageIcon;
  9. import javax.swing.JFrame;
  10. import javax.swing.JLabel;
  11. import javax.swing.JScrollPane;
  12. import javax.swing.JTree;
  13. import javax.swing.event.TreeSelectionEvent;
  14. import javax.swing.event.TreeSelectionListener;
  15. import javax.swing.tree.DefaultMutableTreeNode;
  16. import javax.swing.tree.DefaultTreeCellRenderer;
  17. import javax.swing.tree.DefaultTreeModel;
  18. import javax.swing.tree.TreeSelectionModel;
  19.  
  20. public class treenode extends JFrame implements TreeSelectionListener{
  21.  
  22. JLabel jl;
  23. public treenode()
  24. {
  25. super("树形结构");
  26.  
  27. //创建根节点和子节点
  28. DefaultMutableTreeNode root=new DefaultMutableTreeNode("文本编辑器");
  29.  
  30. DefaultMutableTreeNode node1=new DefaultMutableTreeNode("文件");
  31. DefaultMutableTreeNode node2=new DefaultMutableTreeNode("编辑");
  32.  
  33. //利用根节点创建treemodel
  34. DefaultTreeModel treemodel=new DefaultTreeModel(root);
  35. //插入子节点
  36. treemodel.insertNodeInto(node1, root, root.getChildCount());
  37. treemodel.insertNodeInto(node2, root, root.getChildCount());
  38.  
  39. //创建node1的子节点并插入
  40. DefaultMutableTreeNode leafnode=new DefaultMutableTreeNode("打开");
  41. treemodel.insertNodeInto(leafnode, node1, node1.getChildCount());
  42.  
  43. leafnode=new DefaultMutableTreeNode("保存");
  44. treemodel.insertNodeInto(leafnode, node1, node1.getChildCount());
  45.  
  46. leafnode=new DefaultMutableTreeNode("另存为");
  47. treemodel.insertNodeInto(leafnode, node1, node1.getChildCount());
  48.  
  49. leafnode=new DefaultMutableTreeNode("关闭");
  50. treemodel.insertNodeInto(leafnode, node1, node1.getChildCount());
  51.  
  52. //创建node2的子节点并插入
  53. leafnode=new DefaultMutableTreeNode("剪切");
  54. treemodel.insertNodeInto(leafnode, node2, node2.getChildCount());
  55.  
  56. leafnode=new DefaultMutableTreeNode("复制");
  57. treemodel.insertNodeInto(leafnode, node2, node2.getChildCount());
  58.  
  59. leafnode=new DefaultMutableTreeNode("粘贴");
  60. treemodel.insertNodeInto(leafnode, node2, node2.getChildCount());
  61.  
  62. //创建树对象
  63. JTree tree =new JTree(treemodel);
  64.  
  65. tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
  66. tree.addTreeSelectionListener(this);
  67. tree.setRowHeight(20);
  68.  
  69. //创建节点绘制对象
  70. DefaultTreeCellRenderer cell=(DefaultTreeCellRenderer)tree.getCellRenderer();
  71.  
  72. //设置字体
  73. cell.setFont(new Font("Serif",Font.PLAIN,14));
  74. cell.setBackgroundNonSelectionColor(Color.white);
  75. cell.setBackgroundSelectionColor(Color.LIGHT_GRAY);
  76. cell.setForeground(Color.red);
  77.  
  78. cell.setIcon(new ImageIcon("/image/folder.jpg"));
  79.  
  80. //设置选中和不选中时文字的变化颜色
  81. cell.setTextNonSelectionColor(Color.black);
  82. cell.setTextNonSelectionColor(Color.black);
  83.  
  84. this.add(new JScrollPane(tree));
  85.  
  86. jl=new JLabel("你当前选择的节点为:",JLabel.CENTER);
  87. jl.setFont(new Font("Serif",Font.PLAIN,14));
  88. this.add(jl,BorderLayout.SOUTH);
  89. this.setSize(400, 400);
  90. this.setVisible(true);
  91. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  92.  
  93. }
  94.  
  95. public static void main(String[] args) {
  96. // TODO Auto-generated method stub
  97. treenode t=new treenode();
  98. }
  99.  
  100. @Override
  101. public void valueChanged(TreeSelectionEvent e) {
  102. // TODO Auto-generated method stub
  103.  
  104. JTree tree=(JTree)e.getSource();
  105.  
  106. //获取当前选中的节点
  107. DefaultMutableTreeNode selectnode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
  108. String nodename=selectnode.toString();
  109.  
  110. jl.setText("您当前选择的节点为:"+nodename);
  111.  
  112. }
  113.  
  114. }

java 实现树形结构的更多相关文章

  1. java返回树形结构的正确姿势

    业务场景 通常我们前端需要一个树形的导航菜单或者分类菜单,如后台权限管理中的权限树,亦或者下面例子中商城系统的商品分类多级菜单(一般为三级菜单) 数据库设计 数据库设计,采用parentId来指向自己 ...

  2. Java创建树形结构算法实例

    在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBe ...

  3. JAVA获取树形结构

    package com.nnmzkj.common.dto; import lombok.Data; import java.io.Serializable;import java.util.Arra ...

  4. Java实现树形结构的数据转Json格式

    在项目中难免会用到树形结构,毕竟这是一种常用的组织架构.楼主这里整理了两个实现的版本,可以直接拿来使用,非常方便. 楼主没有单独建项目,直接在以前的一个Demo上实现的.第一种,看下面代码: pack ...

  5. java后台树形结构展示---懒加载

    一.数据库设计 二.实体类:entity import com.joyoung.cloud.security.common.validatedGroup.Add;import com.joyoung. ...

  6. 使用递归算法结合数据库解析成java树形结构

    使用递归算法结合数据库解析成java树形结构 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHA ...

  7. java将list转为树形结构的方法

    目录 1.通过转化成json封装数据 2.通过java8 stream转换 1.通过转化成json封装数据 原始数据如下 [ { "name":"甘肃省", & ...

  8. Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级

    在平时的开发工作中,经常遇到这样一个场景,在数据库中存储了具有父子关系的数据,需要将这些数据以树形结构的形式在界面上进行展示.本文的目的是提供了一个通用的编程模型,解决将具有父子关系的数据转换成树形结 ...

  9. java树形结构工具类

    一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树 ...

随机推荐

  1. mysql插入一张表里的数据到另一张表

    公司的一个项目,做报表--要关联的表结构比较多,最后决定把要用的数据集合到一张新表中,需要用到以下的sql语法......分享下: web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要 ...

  2. 【Topcoder】SRM158 DIV2总结

    250分题:给定一个4位字符串initial和rotate这个字符串的方式,然后再给另一个字符串current,问current能否由initial通过rotate得到,需要几次rotate? 简单的 ...

  3. js常用方法汇总

    产生在m.n之间的随机整数 //Math.round()把数四舍五入为最接近的整数. function random(m, n) { return Math.round(Math.random() * ...

  4. 2018.7.12训练赛 -K

    水题 判断素数 因为范围是到16位,所以可以用long long存储 然后判断是否为素数就ok了. 但我提交之后显示10个测试样例通过了9个.......原因是下面标红的部分. 埃氏筛法:若a是合数, ...

  5. Qt如何重写虚函数

    eg:QWidget的有个虚函数,KeyPressEvent,当它的子类获得焦点的时候,如果有任何按键按下,就会触发这个虚函数. 1.在mainwindow.h中声明此虚函数 protected:vo ...

  6. INSPIRED启示录 读书笔记 - 第10章 管理上司

    十条经验 1.为项目波动做好准备:用项目波动代指让你心烦意乱的各种返工.计划变更.不要企图消灭项目波动,但是可以尽量降低其负面影响.方法是提高警惕,记录工作进度,掌握项目波动的规律,寻找对策.制订项目 ...

  7. MySQL实习训练1

    [转载]http://www.cnblogs.com/AndrewXu/p/4779648.html 1. 打开cmd,输入,回车 mysql -uroot -p -P3306 -h127. 1)-u ...

  8. Windows批量添加和删除IP

    随着天气变冷了,好多小伙伴都开始变懒了,都想用最快的方式完成任务 下面给大家介绍一下Windows批量添加和删除IP的办法 (1)批量添加IP 直接在CMD下边运行下边命令. for /l %i in ...

  9. poj1753模拟

    题目链接http://poj.org/problem?id=1573 题意:从第一行第k个出发按照已给的方向前进,问第几步走出去或第几步进入一个有多少步的循环. 就是按照题意模拟就好了. 代码写完了w ...

  10. spark学习2(hive0.13安装)

    第一步:hive安装 通过WinSCP将apache-hive-0.13.1-bin.tar.gz上传到/usr/hive/目录下 [root@spark1 hive]# chmod u+x apac ...