Activer lors d'un clic droit

[Résolu]
Signaler
Messages postés
221
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
16 janvier 2009
-
Messages postés
221
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
16 janvier 2009
-
Bonjour j'ai besoin de votre aide concernant l'activation lors d'un clic droit d'un evènement,

J'aimerai faire un JOptionPane.showMessageDialog mais apparament cela ne marche pas.

Voici le code :

import

java.awt.event.*;
import

javax.swing.*;
import

java.awt.*;

public

class PopupMenuFrame
implements ActionListener{

static JMenuItem
firstmenu;

public
static
void main(String[] args){
JFrame frame new JFrame();JLabel label

new JLabel(
"label");

firstmenu =
new JMenuItem(
"Premier menu");

/*J'aimerai gerer l'evènement firstmenu */
firstmenu.addActionListener(
this);

final JPopupMenu labelPopupMenu =
new JPopupMenu(); labelPopupMenu.add(

firstmenu );labelPopupMenu.add(

new JMenuItem(
"Deuxième menu"));

label.addMouseListener(

new MouseAdapter(){

public
void mouseClicked(MouseEvent e){

// clic sur le bouton droit

if(e.getButton() = = MouseEvent.
BUTTON3 ){

labelPopupMenu.show(e.getComponent(), e.getX(), e.getY());

}

if (e.getSource() ==
firstmenu){

System.

out.println(
"coucou");JOptionPane.showMessageDialog(

null,
"Salut");}

}

});

frame.getContentPane().add(label);

frame.getContentPane().setLayout(

new FlowLayout());frame.setSize(100, 100);

frame.setVisible(

true);

}

public
void actionPerformed(ActionEvent evt){

}

}

Et de plus je ne comprends pas pourquoi est-ce qu'il y a une erreur quand j'ecris firstmenu.addActionListener(this);

Merci d'avance pour votre aide.

5 réponses

Messages postés
5365
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 août 2021
111
Salut,

ton problème vient du fait que tu utilise du non static dans du static soit :
[...]
public static void main(String[] args) {
    [...]
    firstmenu.addActionListener(this);
    [...]
}
[...]

une solution serait de déplacer le code du main dans le constructeur(ou une autre méthode) exemple :
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;

public class PopupMenuFrame implements ActionListener {
    JMenuItem    firstmenu;
   
    public PopupMenuFrame() {
        JFrame frame = new JFrame();
        JLabel label = new JLabel("label");
        firstmenu = new JMenuItem("Premier menu");
        firstmenu.addActionListener(this);

        final JPopupMenu labelPopupMenu = new JPopupMenu();
        labelPopupMenu.add(firstmenu);
        labelPopupMenu.add(new JMenuItem("Deuxième menu"));

        label.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                // clic sur le bouton droit
                if (e.getButton() == MouseEvent.BUTTON3) {
                    labelPopupMenu.show(e.getComponent(), e.getX(), e.getY());
                }

            }

        });

        frame.getContentPane().add(label);
        frame.getContentPane().setLayout(new FlowLayout());
        frame.setSize(100, 100);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new PopupMenuFrame();
    }

    public void actionPerformed(ActionEvent evt) {
        if (evt.getSource() == firstmenu) {
            System.out.println("coucou");
            JOptionPane.showMessageDialog(null, "Salut");
        }
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
5365
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 août 2021
111
Salut,

oui c'est possible :

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;

public class PopupMenuFrame {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JLabel label = new JLabel("label");
        final JMenuItem firstmenu = new JMenuItem("Premier menu");
       firstmenu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                if (evt.getSource() == firstmenu) {
                    System.out.println("coucou");
                    JOptionPane.showMessageDialog(null, "Salut");
                }
            }
       });
        final JPopupMenu labelPopupMenu = new JPopupMenu();
        labelPopupMenu.add(firstmenu);
        labelPopupMenu.add(new JMenuItem("Deuxième menu"));

        label.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                // clic sur le bouton droit
                if (e.getButton() == MouseEvent.BUTTON3) {
                    labelPopupMenu.show(e.getComponent(), e.getX(), e.getY());
                }

            }

        });

        frame.getContentPane().add(label);
        frame.getContentPane().setLayout(new FlowLayout());
        frame.setSize(100, 100);
        frame.setVisible(true);
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
221
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
16 janvier 2009

VOici le code en plus clair DESOLE...

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class PopupMenuFrame implements ActionListener
{
static JMenuItem firstmenu;
public static void main(String[] args)
{
JFrame frame = new JFrame();
JLabel label = new JLabel("label");
firstmenu = new JMenuItem("Premier menu");
firstmenu.addActionListener(this);

final JPopupMenu labelPopupMenu = new JPopupMenu();
labelPopupMenu.add(firstmenu);
labelPopupMenu.add(new JMenuItem("Deuxième menu"));

label.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
// clic sur le bouton droit
if(e.getButton() == MouseEvent.BUTTON3)
{
labelPopupMenu.show(e.getComponent(), e.getX(), e.getY());
}

}

});

frame.getContentPane().add(label);
frame.getContentPane().setLayout(new FlowLayout());
frame.setSize(100, 100);
frame.setVisible(true);


}
public void actionPerformed(ActionEvent evt)
{
if(evt.getSource() == firstmenu)
{
System.out.println("coucou");
JOptionPane.showMessageDialog(null,"Salut");
}
}

}
Je souhaiterai declencher un evenement lorsque je clique sur firstmenu.

Merci pour votre aide
Messages postés
221
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
16 janvier 2009

OK Twinuts Merci pour ton aide , par contre cela aurait été possible de créer un ActionListener et de l'inserer avec mon firstmenu.

Je veux dire par là

ActionListener l = null;
firstmenu.addActionListener(l);

Je pose la question juste comme ca vu qu'il n'accepte pas le this.

(et merci encore ,desolé de t'avoir derangé)
Messages postés
221
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
16 janvier 2009

Waou j'avais jamais vu cette technique, un ActionPerformed a l'interieur d'un main.Mais ok c'est une autre technique


 MERCI BEAUCOUP TWINUTS.