• P20 JPopupMenu弹出菜单


    P20 JPopupMenu弹出菜单

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

    1.概述

    JPopupMenu:弹出式菜单、右键菜单。
    弹出菜单是一个可弹出并显示一系列选项的悬浮小窗口。在实际应用中通常通过单击鼠标右键触发弹出显示。
    JPopupMenu 的使用和 JMenuBar 类似。

    2.代码实例

    import com.lijinjiang.beautyeye.BeautyEyeLNFHelper;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    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("Demo01");
            frame.setSize(400, 300);
            JPanel panel = new JPanel();
            // 直接在内容面板上添加鼠标监听器
            panel.addMouseListener(new MouseListener() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    // 鼠标点击(按下并抬起)
                }
    
                @Override
                public void mousePressed(MouseEvent e) {
                    // 鼠标按下
                }
    
                @Override
                public void mouseReleased(MouseEvent e) {
                    // 鼠标释放
    
                    // 如果是鼠标右键,则显示弹出菜单
                    if (e.isMetaDown()) {
                        showPopupMenu(e.getComponent(), e.getX(), e.getY());
                    }
                }
    
                @Override
                public void mouseEntered(MouseEvent e) {
                    // 鼠标进入组件区域
                }
    
                @Override
                public void mouseExited(MouseEvent e) {
                    // 鼠标离开组件区域
                }
            });
            frame.setContentPane(panel);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    
        public static void showPopupMenu(Component invoker, int x, int y) {
            // 创建 弹出菜单 对象
            JPopupMenu popupMenu = new JPopupMenu();
    
            // 创建 一级菜单
            JMenuItem copyMenuItem = new JMenuItem("复制");
            JMenuItem pasteMenuItem = new JMenuItem("粘贴");
            JMenu editMenu = new JMenu("编辑");   // 需要 添加 二级子菜单 的 菜单,使用 JMenu
            JMenuItem fileMenu = new JMenuItem("文件");
    
            // 创建 二级菜单
            JMenuItem findMenuItem = new JMenuItem("查找");
            JMenuItem replaceMenuItem = new JMenuItem("替换");
            // 添加 二级菜单 到 "编辑"一级菜单
            editMenu.add(findMenuItem);
            editMenu.add(replaceMenuItem);
    
            // 添加 一级菜单 到 弹出菜单
            popupMenu.add(copyMenuItem);
            popupMenu.add(pasteMenuItem);
            popupMenu.addSeparator();       // 添加一条分隔符
            popupMenu.add(editMenu);
            popupMenu.add(fileMenu);
    
            // 添加菜单项的点击监听器
            copyMenuItem.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println("复制 被点击");
                }
            });
            findMenuItem.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println("查找 被点击");
                }
            });
    
            // 在指定位置显示弹出菜单
            popupMenu.show(invoker, x, y);
        }
    }
    
    • 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
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99

    3.效果演示

    在这里插入图片描述

  • 相关阅读:
    Golang =比较总结
    Oracle中给表赋予权限
    深入理解 Swift Combine
    (14)点云数据处理学习——RGBD 里程计
    算法通关村第三关-白银挑战双指针思想
    了解服务级别协议(SLA)在 ITSM 中的重要性
    机器学习强基计划0-4:通俗理解奥卡姆剃刀与没有免费午餐定理
    【python技巧】文本处理-re库字符匹配
    _2_顺序表
    mybatis-plus的逻辑删除
  • 原文地址:https://blog.csdn.net/qq_35132089/article/details/126844863