• P18 JMenuBar菜单栏


    系统:Win10
    Java:1.8.0_333
    IDEA:2020.3.4
    Gitee:https://gitee.com/lijinjiang01/JavaSwing

    1.概述

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    JCheckBoxMenuItem、JRadioButtonMenuItem 常用方法:

    // 设置 复选框/单选按钮 是否选中
    void setSelected(boolean b)
    
    // 判断 复选框/单选按钮 是否选中
    boolean isSelected()
    
    // 添加 复选框/单选按钮 状态被改变的监听器
    void addChangeListener(ChangeListener l)
    JMenu 常用方法:
    // 添加 子菜单 到 JMenu 中
    JMenuItem add(JMenuItem menuItem)
    
    // 添加一个子菜单分割线
    void addSeparator()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.代码实例

    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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87

    3.效果演示

    在这里插入图片描述

  • 相关阅读:
    一文搞懂二叉树后序遍历的三种方法
    【Linux】:文件系统
    python项目根据requirements.txt pip安装依赖
    jeesite自定义数据字典,自定义字典表,自带树选择数据源(保姆级图文教程)
    原创的离线版 Redis 教程,给力!(书籍福利)
    React学习之路-目录结构
    最新代码重构:面向单元测试
    香港 Web3 的分岔路口:to 创新 or to 监管,这并不是一个问题
    C语言斐波那契数列的前N项 循环和递归斐波那契数列规律如下:1, 1, 2, 3, 5, 8, 13
    搭建和mybatis-plus官网一样主题的网站(cos+宝塔+vercel)
  • 原文地址:https://blog.csdn.net/qq_35132089/article/details/126844860