【Java AWT 图形界面编程】菜单组件 ③ ( PopupMenu 菜单组件实现步骤 | 使用 MouseAdapter 设置事件监听器 | 代码示例 )





一、PopupMenu 菜单组件实现步骤




1、实现步骤


PopupMenu 菜单组件实现步骤 :

  • 首先 , 创建 PopupMenu 菜单组件 , 并添加到窗口中 ;
        // 创建右键触发的 PopupMenu 菜单组件
        PopupMenu popupMenu = new PopupMenu();
        frame.add(popupMenu);
  • 然后 , 创建 若干 MenuItem 菜单项 , 并将这些菜单项添加到 PopupMenu 菜单组件 中 ;
        MenuItem menuItem10 = new MenuItem("复制");
        popupMenu.add(menuItem10);

        MenuItem menuItem11 = new MenuItem("粘贴");
        popupMenu.add(menuItem11);

        MenuItem menuItem12 = new MenuItem("保存");
        popupMenu.add(menuItem12);
  • 再后 , 将 PopupMenu 菜单组件 添加到 Frame 窗口 中 ;
        frame.add(popupMenu);
  • 最后 , 为指定的布局 , 如 : Frame 窗口 , 注册鼠标右键点击监听事件 , 当监听到用户右键点击鼠标 , 弹出 PopupMenu 菜单组件 ;
        frame.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                super.mouseReleased(e);
                // 是否右键触发了菜单栏
                boolean flag = e.isPopupTrigger();
                if (flag) {
                    popupMenu.show(frame, e.getX(), e.getY());
                }
            }
        });

2、使用 MouseAdapter 设置弹出右键菜单事件监听器


如果要添加一个鼠标监听器 , 需要实现 5 个抽象方法 ;

        new MouseListener(){

            @Override
            public void mouseClicked(MouseEvent e) {
                
            }

            @Override
            public void mousePressed(MouseEvent e) {

            }

            @Override
            public void mouseReleased(MouseEvent e) {

            }

            @Override
            public void mouseEntered(MouseEvent e) {

            }

            @Override
            public void mouseExited(MouseEvent e) {

            }
        };

使用 MouseAdapter , 该类已经实现了上述 5 个抽象函数对应的空方法 , 这里只需要重写感兴趣的方法即可 , 此处只重写 public void mouseReleased(MouseEvent e) 函数 ;

        frame.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                super.mouseReleased(e);
                // 是否右键触发了菜单栏
                boolean flag = e.isPopupTrigger();
                if (flag) {
                    popupMenu.show(frame, e.getX(), e.getY());
                }
            }
        });




二、代码示例



代码示例 :

import java.awt.*;
import java.awt.event.*;

public class MenuExample {
    public static void main(String[] args) {
        Frame frame = new Frame("菜单示例");

        // I. 顶部菜单栏

        // 创建菜单栏并添加到 Frame 对象中
        MenuBar menuBar = new MenuBar();
        frame.setMenuBar(menuBar);

        // 创建菜单并添加到菜单栏中
        Menu menu = new Menu("文件");
        menuBar.add(menu);

        // 创建菜单项并添加到菜单中
        MenuItem menuItem = new MenuItem("打开");
        // 为菜单项添加 ActionListener 监听器
        menuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // 在此处添加要执行的操作
                System.out.println("打开文件");
            }
        });
        menu.add(menuItem);

        MenuItem menuItem2 = new MenuItem("保存");
        menu.add(menuItem2);

        MenuItem menuItem3 = new MenuItem("另存为");
        menu.add(menuItem3);

        // 创建菜单并添加到菜单栏中
        Menu menu2 = new Menu("编辑");
        menuBar.add(menu2);

        // 创建菜单项并添加到菜单中
        MenuItem menuItem4 = new MenuItem("自动换行");
        menu2.add(menuItem4);

        MenuItem menuItem5 = new MenuItem("复制");
        menu2.add(menuItem5);

        MenuItem menuItem6 = new MenuItem("粘贴");
        menu2.add(menuItem6);

        MenuItem menuItem7 = new MenuItem("-");
        menu2.add(menuItem7);

        // 菜单组件 放入 菜单组件
        Menu menu3 = new Menu("格式");
        menu2.add(menu3);

        MenuItem menuItem8 = new MenuItem("注释", new MenuShortcut(KeyEvent.VK_Q, true));
        menu3.add(menuItem8);
        // 为菜单项添加 ActionListener 监听器
        menuItem8.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("注释");
            }
        });

        MenuItem menuItem9 = new MenuItem("取消注释");
        menu3.add(menuItem9);


        // II. 右键菜单栏

        // 创建右键触发的 PopupMenu 菜单组件
        PopupMenu popupMenu = new PopupMenu();
        frame.add(popupMenu);

        MenuItem menuItem10 = new MenuItem("复制");
        popupMenu.add(menuItem10);

        MenuItem menuItem11 = new MenuItem("粘贴");
        popupMenu.add(menuItem11);

        MenuItem menuItem12 = new MenuItem("保存");
        popupMenu.add(menuItem12);

        // 创建事件监听器
        ActionListener actionListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("点击了 : " + e.getActionCommand());
            }
        };

        // 为菜单项添加事件监听器
        menuItem10.addActionListener(actionListener);
        menuItem11.addActionListener(actionListener);
        menuItem12.addActionListener(actionListener);

        frame.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                super.mouseReleased(e);
                // 是否右键触发了菜单栏
                boolean flag = e.isPopupTrigger();
                if (flag) {
                    popupMenu.show(frame, e.getX(), e.getY());
                }
            }
        });

        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}

展示效果 :

在这里插入图片描述

在这里插入图片描述

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值