• 【Java-GUI】04 菜单


    ——1、菜单组件

    相关对象:

    MenuBar 菜单条
    Menu 菜单容器
    PopupMenu 上下文菜单(右键弹出菜单组件)
    MenuItem 菜单项
    CheckboxMenuItem 复选框菜单项

    小技巧:

    1、添加这样的菜单项分割线可以直接调用add(new MenuItem("-"))实现

    2、给某一个菜单项绑定快捷键,调用 new MenuItem("菜单项名称",new MenuShortcut(KeyEvent.枚举按键值,true))

    案例:

    package cn.dzz;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class Main {
        public static void main(String[] args) {
            // 创建窗体
            Frame frame = new Frame();
            
            // 先把界面需要的组件创建出来
            MenuBar menuBar = new MenuBar();
    
            Menu fileMenu = new Menu("file");
            Menu editMenu = new Menu("edit");
            // 格式菜单嵌入在编辑菜单对象中
            Menu formatMenu = new Menu("Format");
    
            // 菜单项
            MenuItem autoNextLineMenuItem = new MenuItem("autoNextLine");
            MenuItem copyMenuItem = new MenuItem("copy");
            MenuItem pasteMenuItem = new MenuItem("paste");
    
            MenuItem commentMenuItem = new MenuItem("comment Ctrl + Shift + Q");
            MenuItem cancelCommentMenuItem = new MenuItem("comment cancel");
    
            // 别漏了文本编辑区
            TextArea textArea = new TextArea(6,40);
    
            // 事件交互处理
            commentMenuItem.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    textArea.append("您点击了菜单项:" + e.getActionCommand());
                }
            });
    
            // 先从小的组件开始组装到一起
    
            // 格式菜单装上注释和取消注释
            formatMenu.add(commentMenuItem);
            formatMenu.add(cancelCommentMenuItem);
            // 再组装编辑菜单
            editMenu.add(autoNextLineMenuItem);
            editMenu.add(copyMenuItem);
            editMenu.add(pasteMenuItem);
            editMenu.add(new MenuItem("-")); // 菜单分割线
            editMenu.add(formatMenu);
    
            // 再是菜单条添加菜单对象
            menuBar.add(fileMenu);
            menuBar.add(editMenu);
            
            // 总体布局确定
            frame.setMenuBar(menuBar);
            frame.add(textArea);
    
            frame.pack();
            frame.setVisible(true);
        }
    }
    

    效果还不错:

    设置的菜单:

    多点击几次之后发现没有换行,需要加上 换行字符

    textArea.append("您点击了菜单项:" + e.getActionCommand() + "
    ");

    弹出式菜单对象 PopupMenu

    案例:

    package cn.dzz;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class Main {
    
    
        public static void main(String[] args) {
            // 创建窗体
            Frame frame = new Frame();
    
            // 先创建组件,之后进行布局设置
            TextArea textArea = new TextArea("demo text 文本内容",6, 40);
            Panel panel = new Panel();
            panel.setPreferredSize(new Dimension(400,300)); // 大小
            PopupMenu popupMenu = new PopupMenu(); // 右键菜单
    
            MenuItem commentMenuItem = new MenuItem("comment");
            MenuItem cancelCommentMenuItem = new MenuItem("cancelComment");
            MenuItem copyMenuItem = new MenuItem("copy");
            MenuItem saveMenuItem = new MenuItem("save");
    
            // 布局组装
            popupMenu.add(commentMenuItem);
            popupMenu.add(cancelCommentMenuItem);
            popupMenu.add(saveMenuItem);
            popupMenu.add(copyMenuItem);
            panel.add(popupMenu);
    
            Box verticalBox = Box.createVerticalBox();
            verticalBox.add(textArea);
            verticalBox.add(panel);
            frame.add(verticalBox, BorderLayout.CENTER);
    
            // 事件监听设置
            ActionListener actionListener = new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    String actionCommand = e.getActionCommand();
                    textArea.append("
    您右键菜单选择的是:" + actionCommand);
                }
            };
    
            commentMenuItem.addActionListener(actionListener);
            cancelCommentMenuItem.addActionListener(actionListener);
            copyMenuItem.addActionListener(actionListener);
            saveMenuItem.addActionListener(actionListener);
    
            // 鼠标右键监听设置
            panel.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseReleased(MouseEvent e) {
                    // super.mouseReleased(e);
    
                    boolean popupTrigger = e.isPopupTrigger();
                    if (popupTrigger) {
                        // 参数1 所属的父组件对象,
                        popupMenu.show(panel, e.getX(), e.getY());
                    }
                }
            });
    
            frame.pack();
            frame.setVisible(true);
        }
    }

    效果:

  • 相关阅读:
    Linux 如何查看当前目录
    Docker快速入手实战笔记
    【ssh】ssh登录出现‘The authenticity of host ‘IP’ can't be established.’的问题
    【AFL(七)】afl-fuzz.c小改——输出文件夹暂存
    【steam】Steam背景美化——长展柜终极指南
    【AFL(六)】AFL源码中的那些头文件
    【AFL(五)】文件变异策略
    【Latex】详细的简易教程——写在论文开始之前
    【Latex】论文写作工具:VScode 2019 + latex workshop
    【AFL(四)】afl-cmin修改:文件夹相关操作鲁棒性
  • 原文地址:https://www.cnblogs.com/mindzone/p/14378172.html
Copyright © 2020-2023  润新知