JavaSwing之--JMenuBar

news2025/6/6 15:07:09

Java Swing之–JMenuBar(菜单栏)

JMenuBar是 Java Swing 库中的一个组件,用于创建菜单栏,通常位于窗口的顶部。它是菜单系统的容器,用于组织和显示应用程序的菜单结构

菜单栏由菜单构成,菜单由菜单项或子菜单构成,也就是说菜单项可以是JMenuItem对象、JMenu对象,也可以是JRaidioButtonMenuItem、JCheckBoxMenuItem,菜单项可以添加图标。

菜单栏基本结构由下图能基本表示常见构成。

在这里插入图片描述

基于以上结构,从JMenuBar、JMenu、JMenuItem等类系统描述菜单栏的构建。

技术实现路径可以参照以下思路。

①创建一个JMenuBar对象;

②创建菜单JMenu对象;

③创建JMenu内的菜单项对象JMenuItem、JRadioButtonMenuItem、JCheckBoxMenuItem,将创建好的菜单项添加到②中对应的菜单中;

④将②中创建的菜单添加的①中创建的菜单栏中;

⑤调用窗体的setJMenuBar(JMenuBar munubar)方法将①中创建的菜单栏设置为窗体的菜单栏。

一、构造方法
1.1 JMenuBar构造方法
构造方法功能描述
JMenuBar()创建一个新的菜单栏
1.2 JMenu构造方法
构造方法功能描述
JMenu()构造一个没有文本的新 JMenu。
JMenu(String s)使用提供的字符串作为其文本构造一个新的 JMenu。
JMenu(String s, boolean b)构造一个新的 JMenu,将提供的字符串作为其文本,并指定是否为可撕下的菜单。
JMenu(Action a)构造一个菜单,其属性取自提供的Action。
1.3 JMenuItem构造方法
JMenuItem()创建一个没有设置文本或图标的JMenuItem。
JMenuItem(String)用指定的文本创建一个 JMenuItem。
JMenuItem(Icon)创建一个带有指定图标的 JMenuItem。
JMenuItem(String, Icon)创建具有指定文本和图标的 JMenuItem。
JMenuItem(String, int)使用指定的文本和键盘助记符创建 JMenuItem。
JMenuItem(Action)创建一个菜单项,其属性取自指定的 Action 。

在使用键盘助记符时,根据菜单文本选中某一字符作为助记符,数值为KeyEvent的常数,可以是字母VK_A~VK_Z,也可是是其他数字常数。

1.4 复选菜单项
构造方法功能描述
JCheckBoxMenuItem()创建一个最初未选中的复选框菜单项,没有设置文本或图标。
JCheckBoxMenuItem(String text)创建一个最初未选中的带有文本的复选框菜单项。
JCheckBoxMenuItem(String text, boolean b)创建具有指定文本和选择状态的复选框菜单项。
JCheckBoxMenuItem(String text, Icon icon)使用指定的文本和图标创建一个最初未选中的复选框菜单项。
JCheckBoxMenuItem(String text, Icon icon, boolean b)创建具有指定文本、图标和选择状态的复选框菜单项。
JCheckBoxMenuItem(Action a)创建一个菜单项,其属性取自提供的 Action。
JCheckBoxMenuItem(Icon icon)创建一个带有图标的最初未选中的复选框菜单项。
1.5 单选菜单项
构造方法功能描述
JRadioButtonMenuItem()创建一个没有设置文本或图标的JRadioButtonMenuItem。
JRadioButtonMenuItem(String text)创建一个带有文本的 JRadioButtonMenuItem。
JRadioButtonMenuItem(String text, boolean selected)创建具有指定文本和选择状态的单选按钮菜单项。
JRadioButtonMenuItem(String text, Icon icon)创建具有指定文本和 Icon 的单选按钮菜单项。
JRadioButtonMenuItem(String text, Icon icon, boolean selected)创建具有指定文本、图像和选择状态的单选按钮菜单项。
JRadioButtonMenuItem(Action a)创建一个单选按钮菜单项,其属性取自提供的Action。
JRadioButtonMenuItem(Icon icon)创建一个带有图标的 JRadioButtonMenuItem。
JRadioButtonMenuItem(Icon icon, boolean selected)创建具有指定图像和选择状态但没有文本的单选按钮菜单项。
1.6 弹出菜单项
构造方法功能描述
JPopupMenu()构造一个没有“调用者”的JPopupMenu。
JPopupMenu(String label)构造具有指定标题的 JPopupMenu。
二、常用方法
1.1 JMenuBar方法

以创建的菜单栏对象为例讲解方法

JMenuBar menuBar = new JMenuBar();//创建一个菜单栏
  • void setMargin(Insets m):设置菜单栏边框与其菜单之间的边距。

  • setBackground(Color c) 设置菜单栏的背景色

menuBar.setBackground(new Color(0xFFC75F));//默认是系统背景色
  • setBorder(Border border) 设置菜单栏的边框。当创建一个空边框时,能起到设置内边距的效果。
menuBar.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//设置空边框
  • setFont(Font font)单独设置菜单、子菜单、菜单项字体
JMenu file   = new JMenu("文件");
file.setFont(new Font("微软雅黑",Font.PLAIN,20));											

统一设置字体,可以通过UIManager设置,方法如下

Font menuFont = new Font("微软雅黑",Font.PLAIN,20);//创建字体对象
 UIManager.put("Menu.font",menuFont);//设置菜单字体
UIManager.put("MenuItem.font",menuFont);//设置菜单项字体
UIManager.put("CheckBoxMenuItem.font",menuFont);//设置复选菜单项字体
UIManager.put("RadioButtonMenuItem.font",menuFont);//设置单选菜单项字体
UIManager.put("MenuBar.font",menuFont);//设置菜单栏字体
1.2 JMenu方法

以以下创建的菜单对象为例讲解

//创建文件菜单
JMenu file   = new JMenu("文件(F)");
  • setMnemonic(int mnemonic) 设置菜单的助记符。
//设置菜单的助记符为F键,用Alt+F键可以快速打开菜单
file.setMnemonic(KeyEvent.VK_F);
1.3 JMenuItem方法

以新建文件菜单项为例

JMenuItem newFile = new JMenuItem("新建");//新建文件菜单项							
  • setAccelerator(KeyStroke keystroke) 为菜单项设置快捷键,直接按下快捷键就能触发该菜单项的操作。设置快捷键后,菜单项的右边会显示出对应的快捷键文本。参数keystroke代表着一个按键组合。
//设置新建菜单项的快捷组合键是Ctrl+N
newFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
1.4 事件处理

菜单事件常见的是鼠标事件或动作事件,为各级菜单注册鼠标监听或动作监听,可完成指定的功能。示例如下。

  • 单击某一菜单,在窗体中显示某一面板容器
//创建打开文件菜单项
JMenuItem openFile = new JMenuItem("打开(O)");

//创建一个对应打开文件菜单的面板容器
JPanel openPanel = new JPanel();//创建一个面板
openPanel.add(new JLabel("这是打开界面"));// 添加一个标签
openPanel.setBackground(new Color( 0xFFC75F));//设置背景色

// 为"打开文件"按钮设置事件监听器,将面板显示在窗体中心区域
openFile.addActionListener(e -> {
    // container是面板的容器。移除容器中的所有组件,准备加载新组件
    container.removeAll();
    // 将"打开面板"添加到容器的中心位置,占据主要显示区域
    container.add(openPanel,BorderLayout.CENTER);
    // 重新绘制容器,使更改可见
    container.revalidate();//重新计算容器内组件的布局;
    container.repaint();//重绘容器及其内容,确保界面更新显示。
});

关于菜单操作,还有菜单JMenu选择事件(MenuSelectionEvent)、JMenuBar的焦点事件(FocusEvent)、鼠标事件(MouseEvent)、键盘事件(KeyEvent),可根据需要选择某一合理事件应用到程序中,本文不在赘述。

三、总结

在Java GUI编程中,菜单栏由JMenuBar来创建,它包含菜单JMenu或其他组件,菜单JMenu中包含菜单项JMenuItem或其他菜单项。

为了便于快捷操作,可为菜单或菜单项设置快捷组合键。

响应菜单事件,可以完成强大的功能,提升程序效率。

关于菜单有关的操作涉及多个类,更多应用请阅读官方说明文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2401793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【物联网-S7Comm协议】

物联网-S7Comm协议 ■ 调试工具■ S7协议-简介■ S7协议和modbusTCP协议区别■ OSI 层 S7 协议■ S7协议数据结构 (TPKTCOTPS7Comm)■ TPKT(第五层:会话层) 总共占4个字节■ COTP(第六层:表示层…

数据分析后台设计指南:实战案例解析与5大设计要点总结

引言 数据于企业而言异常重要,企业通过数据可以优化战略决策,因此企业对数据的采集正趋向智能化、数字化,数据分析后台就是企业智能化、数字化记录、分析数据的渠道。本文分享一个数据分析后台原型实战案例,通过页面拆解总结原型…

网络测试实战:金融数据传输的生死时速

阅读原文 7.4 网络测试实战--数据传输:当毫秒决定百万盈亏 你的交易指令为何总是慢人一步? 在2020年"原油宝"事件中,中行原油宝产品因为数据传输延迟导致客户未能及时平仓,最终亏损超过90亿元。这个血淋淋的案例揭示了…

数据库系统概论(十四)详细讲解SQL中空值的处理

数据库系统概论(十四)详细讲解SQL中空值的处理 前言一、什么是空值?二、空值是怎么产生的?1. 插入数据时主动留空2. 更新数据时设置为空3. 外连接查询时自然出现 三、如何判断空值?例子:查“漏填数据的学生…

【信创-k8s】海光/兆芯+银河麒麟V10离线部署k8s1.31.8+kubesphere4.1.3

❝ KubeSphere V4已经开源半年多,而且v4.1.3也已经出来了,修复了众多bug。介于V4优秀的LuBan架构,核心组件非常少,资源占用也显著降低,同时带来众多功能和便利性。我们决定与时俱进,使用1.30版本的Kubernet…

一台电脑联网如何共享另一台电脑?网线方式

前言 公司内网一个人只能申请一个账号和一个主机设备;会检测MAC地址;如果有两台设备,另一台就没有网;因为是联想老电脑,共享热点用不了,但是有一根网线,现在解决网线方式共享网络; …

MacroDroid安卓版:自动化操作,让生活更智能

在智能手机的日常使用中,我们常常会遇到一些重复性的任务,如定时开启或关闭Wi-Fi、自动回复消息、根据位置调整音量等。这些任务虽然简单,但频繁操作会让人感到繁琐。MacroDroid安卓版正是为了解决这些问题而设计的,它是一款功能强…

力提示(force prompting)的新方法

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【Redis实战:缓存与消息队列的应用】

在现代互联网开发中,Redis 作为一款高性能的内存数据库,广泛应用于缓存和消息队列等场景。本文将深入探讨 Redis 在这两个领域的应用,并通过代码示例比较两个流行的框架(Redis 和 RabbitMQ)的特点与适用场景&#xff0…

实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.12 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第10章拟合回归模型10.9节思考题10.12 R语言解题。主要涉及线性回归、回归的显著性、残差分析。 10-12 vial <- seq(1, 12, 1) Viscosity <- c(26,24,175,160,163,55,62,100,26,30…

告别局域网:实现NASCab云可云远程自由访问

文章目录 前言1. 检查NASCab本地端口2. Qindows安装Cpolar3. 配置NASCab远程地址4. 远程访问NASCab小结 5. 固定NASCab公网地址6. 固定地址访问NASCab 前言 在数字化生活日益普及的今天&#xff0c;拥有一个属于自己的私有云存储&#xff08;如NASCab云可云&#xff09;已成为…

Python实现markdown文件转word

1.markdown内容如下&#xff1a; 2.转换后的内容如下&#xff1a; 3.附上代码&#xff1a; import argparse import os from markdown import markdown from bs4 import BeautifulSoup from docx import Document from docx.shared import Inches from docx.enum.text import …

NLP学习路线图(十七):主题模型(LDA)

在浩瀚的文本海洋中航行&#xff0c;人类大脑天然具备发现主题的能力——翻阅几份报纸&#xff0c;我们迅速辨别出"政治"、"体育"、"科技"等板块&#xff1b;浏览社交媒体&#xff0c;我们下意识区分出美食分享、旅行见闻或科技测评。但机器如何…

综采工作面电控4X型铜头连接器 conm/4x100s

综采工作面作为现代化煤矿生产的核心区域&#xff0c;其设备运行的稳定性和安全性直接关系到整个矿井的生产效率。在综采工作面的电气控制系统中&#xff0c;电控连接器扮演着至关重要的角色&#xff0c;而4X型铜头连接器CONM/4X100S作为其中的关键部件&#xff0c;其性能优劣直…

用ApiFox MCP一键生成接口文档,做接口测试

日常开发过程中&#xff0c;尤其是针对长期维护的老旧项目&#xff0c;许多开发者都会遇到一系列相同的困扰&#xff1a;由于项目早期缺乏严格的开发规范和接口管理策略&#xff0c;导致接口文档缺失&#xff0c;甚至连基本的接口说明都难以找到。此外&#xff0c;由于缺乏规范…

在compose中的Canvas用kotlin显示多数据波形闪烁的问题

在compose中的Canvas显示多数据波形闪烁的问题&#xff1a;当在Canvas多组记录波形数组时&#xff0c;从第一组开始记录多次显示&#xff0c;如图&#xff0c;当再次回到第一次记录位置再显示时&#xff0c;波形出现闪烁。 原码如下&#xff1a; data class DcWaveForm(var b…

【学习笔记】MIME

文章目录 1. 引言2. MIME 构成Content-Type&#xff08;内容类型&#xff09;Content-Transfer-Encoding&#xff08;传输编码&#xff09;Multipart&#xff08;多部分&#xff09; 3. 常见 MIME 类型 1. 引言 早期的电子邮件只能发送 ASCII 文本&#xff0c;无法直接传输二进…

单北斗定位芯片AT9880B

AT9880B 是面向北斗卫星导航系统的单模接收机单芯片&#xff08;SOC&#xff09;&#xff0c;内部集成射频前端、数字基带处理单元、北斗多频信号处理引擎及电源管理模块&#xff0c;支持北斗二号与三号系统的 B1I、B1C、B2I、B3I、B2a、B2b 频点信号接收。 主要特征 支持北斗二…

旅游微信小程序制作指南

想创建旅游微信小程序吗&#xff1f;知道旅游业企业怎么打造自己的小程序吗&#xff1f;这里有零基础小白也能学会的教程&#xff0c;教你快速制作旅游类微信小程序&#xff01; 旅游行业能不能开发微信小程序呢&#xff1f;答案是肯定的。微信小程序对旅游企业来说可是个宝&am…

Ubuntu ifconfig 查不到ens33网卡

BUG&#xff1a;ifconfig查看网络配置信息&#xff1a; 终端输入以下命令&#xff1a; sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start - service network - manager stop &#xff1a;停止…