系统:Win10
Java:1.8.0_333
IDEA:2020.3.4
Gitee:https://gitee.com/lijinjiang01/JavaSwing
JMenuBar:菜单栏。菜单栏组件添加到 JFrame 窗口后,在窗口的内容显示区域的顶部出现。实现一个菜单栏主要涉及三种类:
(1)JMenuBar:表示一个菜单栏。
(2)JMenu:表示菜单栏上的一个一级菜单。
(3)JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem:表示一级菜单下的一个子菜单项,三者分别表示 普通的子菜单、带复选框的子菜单、带单选按钮的子菜单。
提示:JMenu 继承自 JMenuItem,所以一个 JMenu 也可以当做是一个二级子菜单项,通过 JMenu 和 JMenuItem 之间的嵌套,可实现多级子菜单效果。
JMenu、JCheckBoxMenuItem、JRadioButtonMenuItem 均继承自 JMenuItem,下面介绍其中较常用的方法:
JMenuItem 常用构造方法:
/**
* 参数说明:
* text: 菜单显示的文本
* icon: 菜单显示的图标
*/
JMenuItem()
JMenuItem(String text)
JMenuItem(Icon icon)
JMenuItem(String text, Icon icon)
JMenuItem 常用方法:
// 设置菜单显示的文本
void setText(String text)
// 设置菜单显示的图标
void setIcon(Icon defaultIcon)
// 设置菜单的键盘助记符
void setMnemonic(int mnemonic)
// 设置修改键,使用键盘快捷键直接触发菜单项的动作
void setAccelerator(KeyStroke keyStroke)
/*
* 例如按下 ALT+N 键触发菜单项动作:
* menuItem.setMnemonic(KeyEvent.VK_N);
* menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.ALT_MASK));
*/
// 添加菜单被点击的监听器
void addActionListener(ActionListener l)
// 绑定菜单项的动作命令名称,如果所有菜单项使用同一个监听器,
// 可以再监听器回调时通过命令名称区别是哪个菜单项触发的动作。
void setActionCommand(String actionCommand)
JCheckBoxMenuItem、JRadioButtonMenuItem 常用方法:
// 设置 复选框/单选按钮 是否选中
void setSelected(boolean b)
// 判断 复选框/单选按钮 是否选中
boolean isSelected()
// 添加 复选框/单选按钮 状态被改变的监听器
void addChangeListener(ChangeListener l)
JMenu 常用方法:
// 添加 子菜单 到 JMenu 中
JMenuItem add(JMenuItem menuItem)
// 添加一个子菜单分割线
void addSeparator()
import com.lijinjiang.beautyeye.BeautyEyeLNFHelper;
import javax.swing.*;
import java.awt.*;
public class Demo01 {
public static void main(String[] args) {
try {
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.generalNoTranslucencyShadow;
BeautyEyeLNFHelper.launchBeautyEyeLNF();
} catch (Exception e) {
e.printStackTrace();
}
JFrame frame = new JFrame();
frame.setTitle("Demo01");
frame.setSize(new Dimension(400, 300));
JMenuBar menuBar = new JMenuBar(); // 创建一个菜单栏
JMenu fileMenu = new JMenu("文件"); // 创建一级菜单
JMenu editMenu = new JMenu("编辑"); // 创建一级菜单
JMenu viewMenu = new JMenu("视图"); // 创建一级菜单
JMenu helpMenu = new JMenu("帮助"); // 创建一级菜单
// 文件菜单
JMenuItem newMenuItem = new JMenuItem("新建"); // 创建一级子菜单
JMenuItem openMenuItem = new JMenuItem("打开");
JMenuItem exitMenuItem = new JMenuItem("退出");
fileMenu.add(newMenuItem);
fileMenu.add(openMenuItem);
fileMenu.addSeparator();
fileMenu.add(exitMenuItem);
// 编辑菜单
JMenuItem copyMenuItem = new JMenuItem("复制");
JMenuItem pasteMenuItem = new JMenuItem("粘贴");
editMenu.add(copyMenuItem);
editMenu.add(pasteMenuItem);
// 视图菜单
JCheckBoxMenuItem checkBoxMenuItem01 = new JCheckBoxMenuItem("复选框子菜单01");
JCheckBoxMenuItem checkBoxMenuItem02 = new JCheckBoxMenuItem("复选框子菜单02");
JCheckBoxMenuItem checkBoxMenuItem03 = new JCheckBoxMenuItem("复选框子菜单03");
JRadioButtonMenuItem radioButtonMenuItem01 = new JRadioButtonMenuItem("单选按钮子菜单01");
JRadioButtonMenuItem radioButtonMenuItem02 = new JRadioButtonMenuItem("单选按钮子菜单02");
JRadioButtonMenuItem radioButtonMenuItem03 = new JRadioButtonMenuItem("单选按钮子菜单03");
ButtonGroup buttonGroup = new ButtonGroup(); // 单选按钮要生效,需要放到一个按钮组中
buttonGroup.add(radioButtonMenuItem01);
buttonGroup.add(radioButtonMenuItem02);
buttonGroup.add(radioButtonMenuItem03);
viewMenu.add(checkBoxMenuItem01);
viewMenu.add(checkBoxMenuItem02);
viewMenu.add(checkBoxMenuItem03);
viewMenu.addSeparator();
viewMenu.add(radioButtonMenuItem01);
viewMenu.add(radioButtonMenuItem02);
viewMenu.add(radioButtonMenuItem03);
// 新建 子菜单添加监听器
newMenuItem.addActionListener(e -> {
System.out.println("点击新建按钮");
});
// 退出 子菜单添加监听器
exitMenuItem.addActionListener(e -> {
System.exit(0);
});
// 复选框子菜单01 添加监听
checkBoxMenuItem01.addActionListener(e -> {
System.out.println("复选框子菜单01是否被选中:" + checkBoxMenuItem01.isSelected());
});
// 单选按钮子菜单01 添加监听
radioButtonMenuItem01.addActionListener(e -> {
System.out.println("复选框子菜单01是否被选中:" + radioButtonMenuItem01.isSelected());
});
// 关于菜单
JMenuItem aboutMenuItem = new JMenuItem("关于");
helpMenu.add(aboutMenuItem);
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(viewMenu);
menuBar.add(helpMenu);
frame.setJMenuBar(menuBar); // 设置菜单栏
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}