IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Problème addMouseListener (this)


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut Problème addMouseListener (this)
    Bonjour à tous,

    J'ai un problème avec mes MouseListener lors de ma compilation (J'utilise BlueJ)
    Voici mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class Jeux extends JFrame implements MouseListener
    {
     public static void main (String [] args)
        {
            JButton b1,b2;
            JFrame fenetre = new JFrame();
            fenetre.setSize(600,600);
     
     
            b1 = new JButton();
            b2 = new JButton();
     
            fenetre.setLayout(new GridLayout(1,2));
     
            b1.addMouseListener(this);
            b2.addMouseListener(this);      
     
            fenetre.add(b1);
            fenetre.add(b2);
     
            fenetre.setVisible(true);
        }
     
        public void mouseClicked(MouseEvent EV) 
        { 
            System.out.println("CLIC");
        }
        public void mouseEntered(MouseEvent EV) {}        
        public void mouseExited(MouseEvent EV) {}
        public void mousePressed(MouseEvent EV) {}
        public void mouseReleased(MouseEvent EV) {}
    }
    Lors de la compilation BlueJ me donne l'erreur :

    "non-static variable this cannot be referenced from a static context"

    Avez vous une idée pour me débloqué ? Sachant que je veux utiliser les MouseListener et pas ActionListener.

    Merci d'avance pour vos réponses

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Par défaut
    Hello,

    apparemment t'as un petit problème de notion Objet, je ne vais pas proposer un cours mais pour répondre à ton problème particulier voici des éléments de réponse:

    il n'est pas nécessaire d'avoir d'instance d'une class pour invoquer une méthode static, de ce fait le mot clé "this" (tout seul) dans une méthode static, en l'occurence la méthode main ne fait référence à rien du tout. En fait comme ton programme est codé, ton mouselistener ne sera jamais utilisable.

    Questions qui pourront peut-être t'aider : (objet!)
    pourquoi crées-tu une JFrame dans ton main alors que ta class Jeux est une JFrame, il faut que tu crées une instance de Jeux plutôt, qui elle aura le mouselistener implémenté, comme tu l'as définis.

    jte laisse réfléchir, je propose quand même une solution pour corriger le "bug" sans trop modifier ton code : (je ne donne que la méthode main, le reste est inchangé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public static void main(String[] args) {
    		JButton b1, b2;
    //		JFrame fenetre = new JFrame();
    		Jeux fenetre = new Jeux();
    		fenetre.setSize(600, 600);
    
    		b1 = new JButton();
    		b2 = new JButton();
    
    		fenetre.setLayout(new GridLayout(1, 2));
    
    		b1.addMouseListener(fenetre);
    		b2.addMouseListener(fenetre);
    
    		fenetre.add(b1);
    		fenetre.add(b2);
    
    		fenetre.setVisible(true);
    	}

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut
    Merci pour ta réponse tomy4ever, ce problème est réglé
    Malheureusement j'en ai un autre ....
    Voici mon MouseClicked

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void mouseClicked(MouseEvent ME)
        {
            Object source = ME.getSource();
     
            if(source == b1)
            {
                System.out.println("BOUTON 1");
            }
            else
            {
                System.out.println("Autre bouton");
            }
        }
    Probléme : mon bouton b1 n'est pas reconnu :s
    Comment faire pour faire mes test par la suite ?

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class Jeux extends JFrame implements MouseListener {
      private JButton b1,b2;
     
      public Jeux() {
            setSize(600,600);
     
            b1 = new JButton();
            b2 = new JButton();
     
            setLayout(new GridLayout(1,2));
     
            b1.addMouseListener(this);
            b2.addMouseListener(this);      
     
            fenetre.add(b1);
            fenetre.add(b2);
      }
     
        public static void main (String [] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    Jeux fenetre = new Jeux();
                    fenetre.setVisible(true);
                }
            });
        }
     
        public void mouseClicked(MouseEvent ev) 
        { 
            Object source = ev.getSource();
            if (source == b1) {
                System.out.println("BOUTON 1");
            } else  {
                System.out.println("Autre bouton");
            }
        }
        public void mouseEntered(MouseEvent ev) {}        
        public void mouseExited(MouseEvent ev) {}
        public void mousePressed(MouseEvent ev) {}
        public void mouseReleased(MouseEvent ev) {}
    }
    Voilà un code bien plus propre qui normalement fonctionnera.

Discussions similaires

  1. Problème avec this.(a[0],a[1])
    Par nabil.g dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 24/08/2013, 17h48
  2. problème avec this/super
    Par Scronchh dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 03/09/2010, 20h18
  3. Petit problème avec this
    Par Jobard81 dans le forum Langage
    Réponses: 7
    Dernier message: 16/02/2009, 14h08
  4. [POO] Problème avec $this de PHP4 à PHP5
    Par c4l3m dans le forum Langage
    Réponses: 19
    Dernier message: 16/02/2007, 09h48
  5. [FLASH MX2004] this et problème de référence
    Par cristolb dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 03/05/2006, 22h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo