【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
    评论
MouseAdapterJava 中 MouseListener 接口的一个抽象类实现,用于简化 MouseListener 接口的使用。该类提供了 MouseListener 接口中的所有方法的默认实现,因此使用时只需要继承该类并覆盖需要使用的方法即可。 MouseAdapter 类中提供的方法包括: 1. mouseClicked(MouseEvent e):在鼠标单击时调用。 2. mousePressed(MouseEvent e):在鼠标按下时调用。 3. mouseReleased(MouseEvent e):在鼠标释放时调用。 4. mouseEntered(MouseEvent e):在鼠标进入组件时调用。 5. mouseExited(MouseEvent e):在鼠标离开组件时调用。 需要注意的是,MouseAdapter 类中的所有方法都是空方法,因此在使用时需覆盖需要使用的方法,并在其中编写相应的代码逻辑。 使用 MouseAdapter示例代码如下: ```java import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JPanel; public class MouseAdapterDemo extends JFrame { private JPanel panel; public MouseAdapterDemo() { setTitle("MouseAdapter Demo"); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel = new JPanel(); panel.addMouseListener(new MyMouseListener()); add(panel); } private class MyMouseListener extends MouseAdapter { @Override public void mouseClicked(MouseEvent e) { System.out.println("Mouse clicked at (" + e.getX() + ", " + e.getY() + ")"); } } public static void main(String[] args) { MouseAdapterDemo frame = new MouseAdapterDemo(); frame.setVisible(true); } } ``` 在上述代码中,我们创建了一个 JFrame 窗口,并在其中添加了一个 JPanel 组件。在 JPanel 上注册了一个 MyMouseListener 对象,该对象继承了 MouseAdapter 类并覆盖了 mouseClicked 方法。在 mouseClicked 方法中,我们输出了鼠标单击的坐标信息。当用户单击鼠标时,该信息会被输出到控制台中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值