关于Java弹出菜单实现的问题

今天看书看到java弹出菜单的设计和实现这个部分.书上有段代码

        // Create the popup menu
        jpu = new JPopupMenu();

        // Create the popup menu items
        JMenuItem jmiCut = new JMenuItem("Cut");
        JMenuItem jmiCopy = new JMenuItem("Copy");
        JMenuItem jmiPaste = new JMenuItem("Paste");

        // Add the menu items to the popup menu
        jpu.add(jmiCut);
        jpu.add(jmiCopy);
        jpu.add(jmiPaste);

        // add a listener for the popup trigger
        jfrm.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                if (e.isPopupTrigger())
                    jpu.show(e.getComponent(), e.getX(), e.getY());
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                if (e.isPopupTrigger())
                    jpu.show(e.getComponent(), e.getX(), e.getY());
            }
        });

如上所示,我觉得很神奇,为什么不直接用mouseRealeased和mousePressed这两个中的一个方法定义弹出菜单,而是两个方法定义成一样的.
后来当我把其中的一个方法注释后就弹不出来了.
希望大神能帮我解答一下,谢谢

鼠标被按下,一直不松手,不论停留在原处还是移动,此时触发的是 mousePressed 事件
mouseReleased ,因为它必须发生在 mousePressed 和 mouseDragged 之后:
假设鼠标在A点被按下,然后一直不松开,然后移动到 B 点, 松开,此时触发的是 mouseReleased 事件,在 mouseReleased 事件之前,一定会有 mousePressed 和mouseDragged 事件

保留mouseReleased应该是可以的

这个是适配器的机制问题,released之前一定要有pressed的。一般这两个监听器是一起出现的。
不知道你注释了哪个,你可以把适配器的全部方法都测试一遍,但是其实没什么必要。
专家这么设计一定是有道理的,按下和弹起加起来就是个点击事件。我觉得你没必要纠结。

鼠标被按下,一直不松手,不论停留在原处还是移动,此时触发的是 mousePressed 事件
mouseReleased ,因为它必须发生在 mousePressed 和 mouseDragged 之后:
假设鼠标在A点被按下,然后一直不松开,然后移动到 B 点, 松开,此时触发的是 mouseReleased 事件,在 mouseReleased 事件之前,一定会有 mousePressed 和mouseDragged 事件