Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未触发JPOppMenu菜单项执行的操作_Java_Swing_Jmenuitem - Fatal编程技术网

Java 未触发JPOppMenu菜单项执行的操作

Java 未触发JPOppMenu菜单项执行的操作,java,swing,jmenuitem,Java,Swing,Jmenuitem,弹出菜单和菜单项显示得很好,但我不知道为什么当我点击菜单项时,什么都没有发生,甚至一个简单的println也没有。 我错过了什么 这是我的密码: private void jLabel33MouseReleased(java.awt.event.MouseEvent evt) { Component source = (Component) evt.getSource(); Compon

弹出菜单和菜单项显示得很好,但我不知道为什么当我点击菜单项时,什么都没有发生,甚至一个简单的println也没有。 我错过了什么

这是我的密码:

private void jLabel33MouseReleased(java.awt.event.MouseEvent evt) {                                       
        Component source = (Component) evt.getSource();
        Component panelSource = source.getParent().getParent().getParent().getParent().getParent();
        if (SwingUtilities.isRightMouseButton(evt)){

            ModelLigneModifier ligne = (ModelLigneModifier) SwingUtilities.getAncestorOfClass(ModelLigneModifier.class, (Component) evt.getSource());
            ligne.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 0, 0), 4));
            JPopupMenu menu = new JPopupMenu();
            JMenuItem modifier = new JMenuItem("Modifier le prix");
            modifier.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Controleur.supprimerLigne(panelSource, ligneCompte);
                    System.out.println("modifier");
                }
            });
            JMenuItem supprimer = new JMenuItem("Supprimer la ligne");
            supprimer.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Controleur.modifierLigne(panelSource, ligneCompte);
                    System.out.println("modifier");
                }
            });
            menu.add(new JMenuItem("Modifier le prix"));
            menu.add(new JMenuItem("Supprimer la ligne"));
            //ligne.setComponentPopupMenu(menu);
            menu.show(ligne, evt.getX(), evt.getY());

        }
        else{
        Controleur.ajouterLigneCompte(panelSource);
        }

    } 
当我点击菜单项时,什么都没有发生,甚至一个简单的println也没有

您创建了一个JMenuItem并向其中添加了一个ActionListener,这是正确的:

JMenuItem modifier = new JMenuItem("Modifier le prix");
modifier.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        Controleur.supprimerLigne(panelSource, ligneCompte);
        System.out.println("modifier");
    }
});
但是,您在弹出菜单中添加了一个没有ActionListener的新菜单项,这是不正确的:

menu.add(new JMenuItem("Modifier le prix"));
代码应为:

//menu.add(new JMenuItem("Modifier le prix"));
menu.add( modifier );

使用
ligne.setComponentPopupMenu(菜单)可能会很晚
如果您正在使用
鼠标侦听器
触发弹出窗口,为什么要在运行时将菜单项添加到菜单中?这可能是个问题。尝试将菜单和菜单项添加到类的init metods中的容器。@mstfyldz动态创建弹出菜单是一项非常常见的任务(根据特定上下文更改它们)。不要认为我会使用
setComponentPopupMenu
,但可能会使用
show
instead@MadProgrammer我真的不明白你的第一句话。@MadProgrammer我用show替换了setComponentPopMenu,但它仍然没有进入actionperformed。我有时很笨……非常感谢!