JavaSwing之--JMenuBar
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或其他菜单项。
为了便于快捷操作,可为菜单或菜单项设置快捷组合键。
响应菜单事件,可以完成强大的功能,提升程序效率。
关于菜单有关的操作涉及多个类,更多应用请阅读官方说明文档。
相关文章:

JavaSwing之--JMenuBar
Java Swing之–JMenuBar(菜单栏) JMenuBar是 Java Swing 库中的一个组件,用于创建菜单栏,通常位于窗口的顶部。它是菜单系统的容器,用于组织和显示应用程序的菜单结构 菜单栏由菜单构成,菜单由菜单项或子菜单构成,也…...
vue3+elementplus表格表头加图标及文字提示
表头加自定义内容有很多种方法,包括使用el-icon,插槽,CSS 伪元素添加图标还有font-awesome等等。 一、方法一:使用render-header属性 <el-table :data"tableData"><el-table-column prop"name" la…...

【物联网-S7Comm协议】
物联网-S7Comm协议 ■ 调试工具■ S7协议-简介■ S7协议和modbusTCP协议区别■ OSI 层 S7 协议■ S7协议数据结构 (TPKTCOTPS7Comm)■ TPKT(第五层:会话层) 总共占4个字节■ COTP(第六层:表示层…...
NLP中的input_ids是什么?
在自然语言处理(NLP)中,input_ids 是什么 在自然语言处理(NLP)中,input_ids 是将文本转换为模型可处理的数字表示后的结果,是模型输入的核心参数之一。 一、基本概念 文本数字化 原始文本(如 “Hello world!”)无法直接被模型处理,需要通过分词器(Tokenizer) 将其…...
LeetCode Hot100刷题——划分字母区间
763.划分字母区间 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串 "ababcc" 能够被分为 ["abab", "cc"],但类似 ["aba", "bcc"…...
c++ 基于OpenSSL的EVP接口进行SHA3-512和SM3哈希计算
通过OpenSSL的EVP接口进行 SHA3-512 和 SM3 哈希计算 #include <iostream> #include <openssl/evp.h> #include <cstring>using namespace std;void PrintHex(const std::string &hexStr) {for (unsigned char c : hexStr){printf("%02x", c)…...
Vue3实现拖拽改变元素大小
代码实现 整体页面结构通过一个 dragResize-wrapper 包含左右两个区域,左侧区域包含一个可拖拽的边界。以下是关键代码 HTML 部分 <template><div class"dragResize-wrapper"><div class"dragResize-left"><div class&…...
Spring IoC 详解:原理、实现与实战
Spring IoC 详解:原理、实现与实战 前言 Spring IoC(Inversion of Control,控制反转)是Spring框架的核心基础。它通过解耦对象的创建与依赖关系管理,极大提升了系统的可维护性和扩展性。本文将系统梳理Spring IoC的原…...
深入Java NIO:构建高性能网络应用
引言 在上一篇文章中,我们介绍了Java网络编程的基础模型:阻塞式I/O和线程池模型。这些模型在处理高并发场景时存在明显的局限性。本文将深入探讨Java NIO(New I/O)技术,这是一种能够显著提升网络应用性能的非阻塞I/O模…...

数据分析后台设计指南:实战案例解析与5大设计要点总结
引言 数据于企业而言异常重要,企业通过数据可以优化战略决策,因此企业对数据的采集正趋向智能化、数字化,数据分析后台就是企业智能化、数字化记录、分析数据的渠道。本文分享一个数据分析后台原型实战案例,通过页面拆解总结原型…...
深度学习之模型压缩三驾马车:基于ResNet18的模型剪枝实战(1)
一、背景:为什么需要模型剪枝? 随着深度学习的发展,模型参数量和计算量呈指数级增长。以ResNet18为例,其在ImageNet上的参数量约为1100万,虽然在服务器端运行流畅,但在移动端或嵌入式设备上部署时…...
SSH/RDP无法远程连接?腾讯云CVM及通用服务器连接失败原因与超全排查指南
更多服务器知识,尽在hostol.com 嘿,各位服务器的“船长”和“管理员”们!咱们在浩瀚的数字海洋中驾驭着自己的服务器“战舰”,最怕遇到什么情况?除了数据丢失,恐怕就是突然发现自己被锁在“驾驶舱”门外—…...

网络测试实战:金融数据传输的生死时速
阅读原文 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…...
[蓝桥杯]三体攻击
三体攻击 题目描述 三体人将对地球发起攻击。为了抵御攻击,地球人派出 A B CA B C 艘战舰,在太空中排成一个 AA 层 BB 行 CC 列的立方体。其中,第 ii 层第 jj 行第 kk 列的战舰(记为战舰 (i, j, k)(i, j, k)&am…...
深入解析支撑向量机(SVM):原理、推导与实现
在机器学习领域,支撑向量机(Support Vector Machine,简称SVM)是一种广泛使用的分类算法,以其强大的分类性能和优雅的数学原理而备受关注。本文将从问题定义、数学推导到实际应用,深入解析SVM的核心原理和实…...

一台电脑联网如何共享另一台电脑?网线方式
前言 公司内网一个人只能申请一个账号和一个主机设备;会检测MAC地址;如果有两台设备,另一台就没有网;因为是联想老电脑,共享热点用不了,但是有一根网线,现在解决网线方式共享网络; …...
面试题:SQL 中如何将 多行合并为一行(合并行数据为列)?
✅ 面试题:SQL 中如何将 多行合并为一行(合并行数据为列)? 这是面试和实战中非常常见的场景,属于“行列转换”问题之一,常用于报表聚合、分类汇总、透视表生成等。 go专栏:https://duoke360.co…...

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

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

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

实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.12 R语言解题
本文是实验设计与分析(第6版,Montgomery著,傅珏生译) 第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…...
基于LangChain构建高效RAG问答系统:向量检索与LLM集成实战
基于LangChain构建高效RAG问答系统:向量检索与LLM集成实战 在本文中,我将详细介绍如何使用LangChain框架构建一个完整的RAG(检索增强生成)问答系统。通过向量检索获取相关上下文,并结合大语言模型,我们能够…...

告别局域网:实现NASCab云可云远程自由访问
文章目录 前言1. 检查NASCab本地端口2. Qindows安装Cpolar3. 配置NASCab远程地址4. 远程访问NASCab小结 5. 固定NASCab公网地址6. 固定地址访问NASCab 前言 在数字化生活日益普及的今天,拥有一个属于自己的私有云存储(如NASCab云可云)已成为…...
25_05_29docker
Linux_docker篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目: 版本号: 1.0,0 作者: 老王要学习 日期: 2025.04.25 适用环境: Centos7 文档说明 环境准备 硬件要求 服务器: 2核CPU、2GB内存…...
Java-IO流之缓冲流详解
Java-IO流之缓冲流详解 一、缓冲流概述1.1 什么是缓冲流1.2 缓冲流的工作原理1.3 缓冲流的优势 二、字节缓冲流详解2.1 BufferedInputStream2.1.1 构造函数2.1.2 核心方法2.1.3 使用示例 2.2 BufferedOutputStream2.2.1 构造函数2.2.2 核心方法2.2.3 使用示例 三、字符缓冲流详…...
vscode code runner 使用python虚拟环境
转载如下: zVS Code插件Code Runner使用python虚拟环境_coderunner python-CSDN博客...

Python实现markdown文件转word
1.markdown内容如下: 2.转换后的内容如下: 3.附上代码: 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)
在浩瀚的文本海洋中航行,人类大脑天然具备发现主题的能力——翻阅几份报纸,我们迅速辨别出"政治"、"体育"、"科技"等板块;浏览社交媒体,我们下意识区分出美食分享、旅行见闻或科技测评。但机器如何…...