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

2D Java Discussion :

Problème avec addMouseListener


Sujet :

2D Java

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 27
    Points
    27
    Par défaut Problème avec addMouseListener
    Salut à tous
    je voudrais apprendre à faire du dessin et à utiliser les Listener de tous types, là je voudrais faire un prog, qui dessine un carré et qui lorsque je clique dessus disparait... simple non :p

    Comme je suis un noob, je bloque lorsque je dois ajouter le MoseListener, pourriez vous me dire ce qui bloque ??
    ---------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import java.awt.*;
     
    public class Main {
     
    	public static void main(String[] args) {
     
    		Sprite sprite = new Sprite();
    		sprite.setBackground(Color.WHITE);
    		sprite.setPreferredSize(new Dimension(400,200));
    		Show show = new Show(sprite);
     
    	}
    }
    --------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import javax.swing.*;
    import java.awt.*;
     
    public class Sprite extends JPanel {
     
    	public void paint(Graphics g) {
    		Color c = g.getColor();
    		g.setColor(Color.RED);
    		g.fillRect(10,10,80,80);
    		g.setColor(c);
    	}
    }
    --------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import javax.swing.*;
     
    public class MouseEvent {
     
    	JComponent component;
     
    	public MouseEvent(JComponent component) {
    		this.component = component;
    	}
     
    	public void MouseClicked(MouseEvent e){
    		System.out.println("clic");
    	}
    }
    -------------------------------
    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
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class Show {
    
    	JComponent component;
    	
    	public Show(JComponent component) {
    		this.component = component;
    		JFrame frame = new JFrame("Dessin");
    		frame.getContentPane().add(component);
    		frame.pack();
    		frame.setVisible(true);
    		
    		MouseEvent me = new MouseEvent(component);
    		component.addMouseListener(me);
    	}
    }
    ---------------------------------------

    Merci !

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Bon alors, d'abord, addMouseListener prend en paramètre un classe qui implément MouseListener, donc faudrait peut etre l'implémenter dans ta classe "MouseEvent". Ensuite, problème de logique dans le nommage de ta classe. Tu appelle ta class MouseEvent, alors que, en java, un event c'est ce qui se déclenche quand tu fait une action à la souris. Nommer ainsi ta classe peut prêter à confusion pour lire ton code.

  3. #3
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup pour ta réponse, j'ai modifier la classe qui "gere" le clic, et ca donne ca :
    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
     
    import javax.swing.*;
    import java.awt.event.*;
     
    public class MouseClic extends MouseAdapter implements MouseListener{
     
    	JComponent component;
     
    	public MouseClic(JComponent component) {
    		this.component = component;
    	}
     
    	public void MouseClicked(MouseEvent e){
    		System.out.println("clic");
    	}
    }
    Je n'ai aucune erreur à la compil', mais lorsque je clique, rien ne se passe... j'ai encore fais une grosse bêtise ?

  4. #4
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    D'où l'importance du respect des normes en JAVA : les noms méthode commence par une minuscule. Au lieu de redéfinir la méthode mouseClicked (qui est appelée par l'IHM lors du click) tu en a créé une nouvelle MouseClicked (qui n'est donc jamais appelée).
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  5. #5
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 27
    Points
    27
    Par défaut
    Merci guigui, j'ai corrigé, mais cela n'empeche que j'ai pas l'impression que la méthode mouseClicked soit appelée, en tout cas lorsque je clique sur le sprite, rien ne se passe

    Voici mon code complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import java.awt.*;
     
    public class Main {
     
    	public static void main(String[] args) {
    		Sprite sprite = new Sprite();
    		sprite.setBackground(Color.WHITE);
    		sprite.setPreferredSize(new Dimension(400,200));
    		Show show = new Show(sprite);
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import javax.swing.*;
    import java.awt.*;
     
    public class Sprite extends JPanel {
    	private int x = 20;
    	private int y = 50;
     
    	public void paint(Graphics g) {
    		Color c = g.getColor();
    		g.setColor(Color.RED);
    		g.fillRect(x,y,50,50);
    		g.setColor(c);
    	}
    }
    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
    import javax.swing.*;
    import java.awt.event.*;
     
    public class MouseClic extends MouseAdapter implements MouseListener{
     
    	JComponent component;
     
    	public MouseClic(JComponent component) {
    		this.component = component;
    	}
     
    	public void mouseClicked(MouseEvent e){
    		System.out.println("clic");
    	}
    }
    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
    import javax.swing.*;
     
    public class Show {
     
    	JComponent component;
     
    	public Show(JComponent component) {
    		this.component = component;
    		JFrame frame = new JFrame("Dessin");
    		frame.getContentPane().add(component);
     
    		MouseClic me = new MouseClic(component);
    		component.addMouseListener(me);
     
    		frame.pack();
    		frame.setVisible(true);
    	}
    }
    PS étant débutant, je suis aussi preneur de toute remarque concernant le reste du code

    Merci

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    a priori, vu que ton JPanel est vide et qu'il ne force pas de taille (via la surcharge de getPreferedSize, getMinimumSize et getMaximumSize), je dirais que ton jpanel fait 0px de coté, i lest donc effectivement difficile de cliquer dessus. Met un border (rouge par exemple) à ton jpanel, et t'aura une idée de sa taille.

  7. #7
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 27
    Points
    27
    Par défaut
    Mon JPanel peut être vide alors qu'il contient le Sprite ?

  8. #8
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 27
    Points
    27
    Par défaut
    C'est bon c'est résolu, merci à tous

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par quentin06 Voir le message
    Mon JPanel peut être vide alors qu'il contient le Sprite ?
    Ta classe Sprite est un JPanel vide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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