Java树形菜单的创建

 更新时间:2021年05月19日 11:55:52   作者:IT_xiao小巫  
这篇文章主要为大家详细介绍了Java图形用户界面中树形菜单的创建树形菜单的创建,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java树形菜单的创建代码,供大家参考,具体内容如下

功能:实现创建一个树形菜单
说明:创建树形菜单结构与创建菜单栏类似,是按层次与模型创建的。
通过DefaultMutableTreeNode类创建根节点、子节点和孙节点对象,再通过DefaultTreeModel
类利用根节点创建树模型对象,然后通过treeModel.insertNodeInto方法将节点对象插入树模型中。

效果图:

代码:

import java.awt.*; 
import javax.swing.*; 
import javax.swing.tree.*; 
import javax.swing.event.*; 
public class Tree extends JFrame implements TreeSelectionListener 
{ 
 private JLabel label; 
 
 public Tree() 
 { 
  super("树形菜单"); setSize(400,400); 
  Container container = getContentPane(); 
 
  //创建根节点和子节点 
  DefaultMutableTreeNode root = new DefaultMutableTreeNode("文本编辑器"); 
  DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("文件"); 
  DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("编辑"); 
  //利用根节点创建TreeModel 
  DefaultTreeModel treeModel = new DefaultTreeModel(root); 
  //插入子节点node1,node2 
  treeModel.insertNodeInto(node1,root,root.getChildCount()); 
  treeModel.insertNodeInto(node2,root,root.getChildCount()); 
 
  //创建节点node1的子节点并插入 
  DefaultMutableTreeNode leafnode = new DefaultMutableTreeNode("打开"); 
  treeModel.insertNodeInto(leafnode,node1,node1.getChildCount()); 
  leafnode = new DefaultMutableTreeNode("保存"); 
  treeModel.insertNodeInto(leafnode,node1,node1.getChildCount()); 
  leafnode = new DefaultMutableTreeNode("另存为"); 
  treeModel.insertNodeInto(leafnode,node1,node1.getChildCount()); 
  leafnode = new DefaultMutableTreeNode("关闭"); 
  treeModel.insertNodeInto(leafnode,node1,node1.getChildCount()); 
 
  //创建节点node2的子节点并插入 
  leafnode = new DefaultMutableTreeNode("剪切"); 
  treeModel.insertNodeInto(leafnode,node2,node2.getChildCount()); 
  leafnode = new DefaultMutableTreeNode("复制"); 
  treeModel.insertNodeInto(leafnode,node2,node2.getChildCount()); 
  leafnode = new DefaultMutableTreeNode("粘贴"); 
  treeModel.insertNodeInto(leafnode,node2,node2.getChildCount()); 
 
  //创建树对象 
  JTree tree = new JTree(treeModel); 
  //设置Tree的选择为一次只能选择一个节点 
  tree.getSelectionModel().setSelectionMode( 
       TreeSelectionModel.SINGLE_TREE_SELECTION); 
  //注册监听器 
  tree.addTreeSelectionListener(this); 
 
  tree.setRowHeight(20); 
 
  //创建节点绘制对象 
  DefaultTreeCellRenderer cellRenderer = 
       (DefaultTreeCellRenderer)tree.getCellRenderer(); 
 
  //设置字体 
  cellRenderer.setFont(new Font("Serif",Font.PLAIN,14)); 
  cellRenderer.setBackgroundNonSelectionColor(Color.white); 
  cellRenderer.setBackgroundSelectionColor(Color.yellow); 
  cellRenderer.setBorderSelectionColor(Color.red); 
 
  //设置选或不选时,文字的变化颜色 
  cellRenderer.setTextNonSelectionColor(Color.black); 
  cellRenderer.setTextSelectionColor(Color.blue); 
   
  //把树对象添加到内容面板 
  container.add(new JScrollPane(tree)); 
 
  //创建标签 
  label = new JLabel("你当前选择的节点为:",JLabel.CENTER); 
  label.setFont(new Font("Serif",Font.PLAIN,14)); 
  container.add(label,BorderLayout.SOUTH); 
 
  setVisible(true); //设置可见 
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗口关闭动作 
 } 
 
 //处理TreeSelectionEvent事件 
 public void valueChanged(TreeSelectionEvent event) 
 { 
  JTree tree = (JTree)event.getSource(); 
  //获取目前选取的节点 
  DefaultMutableTreeNode selectionNode = 
   (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); 
  String nodeName = selectionNode.toString(); 
  label.setText("你当前选取的节点为: "+nodeName); 
 } 
 
 public static void main(String args[]) 
 { 
  Tree d = new Tree(); 
 } 
 
} 

本文按层次与模型创建的树形菜单,与创建菜单栏类似,不知道小伙伴们有没有掌握呐?

相关文章

  • 分享JPA的几个小技巧

    分享JPA的几个小技巧

    这篇文章主要分享了JPA的几个小技巧,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • MyBatis逆向工程的创建和使用

    MyBatis逆向工程的创建和使用

    这篇文章主要介绍了MyBatis逆向工程的创建和使用,需要的朋友可以参考下
    2017-08-08
  • 带你重新认识MyBatis的foreach

    带你重新认识MyBatis的foreach

    这篇文章主要介绍了重新认识MyBatis的foreach,本文提出了一种简化<foreach>写法的设想,更重要的是通过解决空集时生成的SQL语法问题,更深刻地理解MyBatis的foreach的生成机制,需要的朋友可以参考下
    2022-11-11
  • 修改Maven settings.xml 后配置未生效的解决

    修改Maven settings.xml 后配置未生效的解决

    这篇文章主要介绍了修改Maven settings.xml 后配置未生效的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • SpringBoot Data JPA 关联表查询的方法

    SpringBoot Data JPA 关联表查询的方法

    这篇文章主要介绍了SpringBoot Data JPA 关联表查询的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 深入Spring Boot实现对Fat Jar jsp的支持

    深入Spring Boot实现对Fat Jar jsp的支持

    这篇文章主要介绍了深入Spring Boot实现对Fat Jar jsp的支持,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 详解Spring Boot微服务如何集成fescar解决分布式事务问题

    详解Spring Boot微服务如何集成fescar解决分布式事务问题

    这篇文章主要介绍了详解Spring Boot微服务如何集成fescar解决分布式事务问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Eclipse插件开发实现控制台输出信息的方法

    Eclipse插件开发实现控制台输出信息的方法

    今天小编就为大家分享一篇关于Eclipse插件开发实现控制台输出信息的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java中Lambda表达式和函数式接口的使用和特性

    Java中Lambda表达式和函数式接口的使用和特性

    Java Lambda表达式是一种函数式编程的特性,可简化匿名内部类的写法,与函数式接口搭配使用,实现代码简洁、可读性高、易于维护的特点,适用于集合操作、多线程编程等场景
    2023-04-04
  • Spring Boot/Angular整合Keycloak实现单点登录功能

    Spring Boot/Angular整合Keycloak实现单点登录功能

    Keycloak新的发行版命名为Quarkus,专为GraalVM和OpenJDK HotSpot量身定制的一个Kurbernetes Native Java框架,计划2019年底正式发布。这篇文章主要介绍了Spring Boot/Angular整合Keycloak实现单点登录,需要的朋友可以参考下
    2019-10-10

最新评论