当前位置: 首页 > article >正文

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表格表头加图标及文字提示

表头加自定义内容有很多种方法&#xff0c;包括使用el-icon&#xff0c;插槽&#xff0c;CSS 伪元素添加图标还有font-awesome等等。 一、方法一&#xff1a;使用render-header属性 <el-table :data"tableData"><el-table-column prop"name" la…...

【物联网-S7Comm协议】

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

NLP中的input_ids是什么?

在自然语言处理(NLP)中,input_ids 是什么 在自然语言处理(NLP)中,input_ids 是将文本转换为模型可处理的数字表示后的结果,是模型输入的核心参数之一。 一、基本概念 文本数字化 原始文本(如 “Hello world!”)无法直接被模型处理,需要通过分词器(Tokenizer) 将其…...

LeetCode Hot100刷题——划分字母区间

763.划分字母区间 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。例如&#xff0c;字符串 "ababcc" 能够被分为 ["abab", "cc"]&#xff0c;但类似 ["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 包含左右两个区域&#xff0c;左侧区域包含一个可拖拽的边界。以下是关键代码 HTML 部分 <template><div class"dragResize-wrapper"><div class"dragResize-left"><div class&…...

Spring IoC 详解:原理、实现与实战

Spring IoC 详解&#xff1a;原理、实现与实战 前言 Spring IoC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;是Spring框架的核心基础。它通过解耦对象的创建与依赖关系管理&#xff0c;极大提升了系统的可维护性和扩展性。本文将系统梳理Spring IoC的原…...

深入Java NIO:构建高性能网络应用

引言 在上一篇文章中&#xff0c;我们介绍了Java网络编程的基础模型&#xff1a;阻塞式I/O和线程池模型。这些模型在处理高并发场景时存在明显的局限性。本文将深入探讨Java NIO&#xff08;New I/O&#xff09;技术&#xff0c;这是一种能够显著提升网络应用性能的非阻塞I/O模…...

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

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

深度学习之模型压缩三驾马车:基于ResNet18的模型剪枝实战(1)

一、背景&#xff1a;为什么需要模型剪枝&#xff1f; 随着深度学习的发展&#xff0c;模型参数量和计算量呈指数级增长。以ResNet18为例&#xff0c;其在ImageNet上的参数量约为1100万&#xff0c;虽然在服务器端运行流畅&#xff0c;但在移动端或嵌入式设备上部署时&#xf…...

SSH/RDP无法远程连接?腾讯云CVM及通用服务器连接失败原因与超全排查指南

更多服务器知识&#xff0c;尽在hostol.com 嘿&#xff0c;各位服务器的“船长”和“管理员”们&#xff01;咱们在浩瀚的数字海洋中驾驭着自己的服务器“战舰”&#xff0c;最怕遇到什么情况&#xff1f;除了数据丢失&#xff0c;恐怕就是突然发现自己被锁在“驾驶舱”门外—…...

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

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

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

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

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

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

[蓝桥杯]三体攻击

三体攻击 题目描述 三体人将对地球发起攻击。为了抵御攻击&#xff0c;地球人派出 A  B  CA  B  C 艘战舰&#xff0c;在太空中排成一个 AA 层 BB 行 CC 列的立方体。其中&#xff0c;第 ii 层第 jj 行第 kk 列的战舰&#xff08;记为战舰 (i, j, k)(i, j, k)&am…...

深入解析支撑向量机(SVM):原理、推导与实现

在机器学习领域&#xff0c;支撑向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff09;是一种广泛使用的分类算法&#xff0c;以其强大的分类性能和优雅的数学原理而备受关注。本文将从问题定义、数学推导到实际应用&#xff0c;深入解析SVM的核心原理和实…...

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

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

面试题:SQL 中如何将 多行合并为一行(合并行数据为列)?

✅ 面试题&#xff1a;SQL 中如何将 多行合并为一行&#xff08;合并行数据为列&#xff09;&#xff1f; 这是面试和实战中非常常见的场景&#xff0c;属于“行列转换”问题之一&#xff0c;常用于报表聚合、分类汇总、透视表生成等。 go专栏&#xff1a;https://duoke360.co…...

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

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

力提示(force prompting)的新方法

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

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

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

基于LangChain构建高效RAG问答系统:向量检索与LLM集成实战

基于LangChain构建高效RAG问答系统&#xff1a;向量检索与LLM集成实战 在本文中&#xff0c;我将详细介绍如何使用LangChain框架构建一个完整的RAG&#xff08;检索增强生成&#xff09;问答系统。通过向量检索获取相关上下文&#xff0c;并结合大语言模型&#xff0c;我们能够…...

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

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

25_05_29docker

Linux_docker篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a; 版本号: 1.0,0 作者: 老王要学习 日期: 2025.04.25 适用环境: Centos7 文档说明 环境准备 硬件要求 服务器&#xff1a; 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虚拟环境

转载如下&#xff1a; z​​​​​​​VS Code插件Code Runner使用python虚拟环境_coderunner python-CSDN博客...

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;我们下意识区分出美食分享、旅行见闻或科技测评。但机器如何…...