当前位置: 首页 > 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或其他菜单项。

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

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

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

http://www.lryc.cn/news/2401793.html

相关文章:

  • vue3+elementplus表格表头加图标及文字提示
  • 【物联网-S7Comm协议】
  • NLP中的input_ids是什么?
  • LeetCode Hot100刷题——划分字母区间
  • c++ 基于OpenSSL的EVP接口进行SHA3-512和SM3哈希计算
  • Vue3实现拖拽改变元素大小
  • Spring IoC 详解:原理、实现与实战
  • 深入Java NIO:构建高性能网络应用
  • 数据分析后台设计指南:实战案例解析与5大设计要点总结
  • 深度学习之模型压缩三驾马车:基于ResNet18的模型剪枝实战(1)
  • SSH/RDP无法远程连接?腾讯云CVM及通用服务器连接失败原因与超全排查指南
  • 网络测试实战:金融数据传输的生死时速
  • 数据库系统概论(十四)详细讲解SQL中空值的处理
  • 【信创-k8s】海光/兆芯+银河麒麟V10离线部署k8s1.31.8+kubesphere4.1.3
  • [蓝桥杯]三体攻击
  • 深入解析支撑向量机(SVM):原理、推导与实现
  • 一台电脑联网如何共享另一台电脑?网线方式
  • 面试题:SQL 中如何将 多行合并为一行(合并行数据为列)?
  • MacroDroid安卓版:自动化操作,让生活更智能
  • 力提示(force prompting)的新方法
  • 【Redis实战:缓存与消息队列的应用】
  • 实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.12 R语言解题
  • 基于LangChain构建高效RAG问答系统:向量检索与LLM集成实战
  • 告别局域网:实现NASCab云可云远程自由访问
  • 25_05_29docker
  • Java-IO流之缓冲流详解
  • vscode code runner 使用python虚拟环境
  • Python实现markdown文件转word
  • NLP学习路线图(十七):主题模型(LDA)
  • 深度学习之模型压缩三驾马车:基于ResNet18的模型剪枝实战(2)