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