MouseListener sur unJPanel

Résolu
TheBigBossJeff Messages postés 6 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 27 novembre 2005 - 25 mars 2005 à 16:44
TheBigBossJeff Messages postés 6 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 27 novembre 2005 - 26 mars 2005 à 11:34
Bonjour à tous.



Voila ça fait quelque temps que je me plaits à essayer le java.

Pour l'instant j'ai réussi à me débrouiller pour résoudre mes problèmes mais là je calle.

Y a surement un p'tit truc que j'ai pas bien fait mais je trouve pas.



Voila le pb :



J'ai créé une classe



class Picture extends JComponent



ensuite je l'initialise comme il faut et je la met dans un JPanel



Picture picTmp = new Picture(createImageIcon("images/vide.gif",

"solution").getImage());

JPanel pnlTmp = new JPanel();

pnlTmp.add(picTmp);



J'ajoute un écouteur sur mon Jpanel pour pouvoir détecter un click (la
classe principale où je créé le jpanel a un implements MouseListener)



pnlTmp.addMouseListener(this);



dans ma fonction mouseclicked j'affiche une messagebox pour voir si l'évènement est détecté



public void mouseClicked(MouseEvent e) {


JOptionPane.showMessageDialog(null,"coucou");

}



J'espère que jusque là c'est clair



le problème est que quand je clique sur mon Jpanel, rien ne se passe par contre si je met un ecouteur sur picTmp, là ça marche



picTmp.addMouseListener(this);





Or je voudrais réagir au click de la souris sur le JPanel et non pas sur le Picture.



Quelqu'un voit il où est l'erreur ?



D'avance merci.


Jeff

6 réponses

Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 26 août 2012 3
25 mars 2005 à 23:45
Salut,
c'est normal que ce soit ton instance de Picture qui réagisse au click et non l'instance du JPanel, puisque celle-ci se trouve au premier plan par rapport au JPanel.
Je ne peux pas plus t'aider. Désolé.

@+
3
cs_Yenapa Messages postés 67 Date d'inscription samedi 12 juillet 2003 Statut Membre Dernière intervention 26 juin 2009
26 mars 2005 à 09:57
Pourquoi tu ne met pas ton image directement dans un JLabel, sans passer par un objetPicture?

Tu as un autre moyen de le faire,
Tu fait une classe qui etends (extends) la classe JPanel, et tu surcharge la methode

public void paint(Graphics g)

en mettant ca:

{
super.paint(g);
g.drawImage(new ImageIcon("Mon image").getImage(),x,y);
}

ou x et y sont les coordonnées ou tu veux placer l'image.

T'a plus qu'a ajouter un listener a ce label pour gerer les evenements de la souris

Benoit
3
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005
26 mars 2005 à 10:58
Yenapa a probablement raison.
En plus, si tu as veux rajouter dynamiquement d'autres images, il suffit, en plus d'extendre JLabel ou JPanel, d'implementer Runnable et d'utiliser la méthode update....

Dans tous les cas si tu veux avoir le container de ton objet, utilise

Container c=tonObjet.getParent() ;

@+
3
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005
25 mars 2005 à 23:31
Salut !

Comment, graphiquement, tu réussis à différencier l'image qui est ds ton JPanel de ton JPanel. As tu mis une couleur particulière à ce JPanel ?

Peut-être que c'est bel et bien le JPanel qui réagit au clic mais il est tellement petit que tu le confonds avec ton image qui est posée dessus.

Je dis peut-être une connerie mais je trouve pas l'errorrr dans ton code...

Az"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TheBigBossJeff Messages postés 6 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 27 novembre 2005
26 mars 2005 à 08:29
Ah ...



Merci pour cette info.



Je vais donc essayer de recupérer mon JPanel en partant de mon image.



Y a-t-il un moyen de d'acceder au conteneur d'un objet (ici, le
conteneur serait mon Jpanel et l'objet serait Picture :) logique) ?

Jeff
0
TheBigBossJeff Messages postés 6 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 27 novembre 2005
26 mars 2005 à 11:34
Merci à tous pour vos réponses ...



Apres avoir cherché j'ai trouvé pour pouvoir acceder au conteneur d'un objet : getParent() (merci quand même anzize).



J'utilise l'objet Picture pour gérer le drag and drop d'images.

mais dans le cas que je vous ai expliqué je n'ai pas besoin de drag and drop donc
Yenapa tu as tout a fait raison, j'aurai du directement mettre une image dans mon Jpanel sans passer par un objet Picture.

De plus j'ai etudié ce que tu me propose et effectivement c très simple.

Je n'ai pas encore trop l'habitude de développer en java.



Encore merci à tous pour vos réponses rapides et efficaces.


Jeff
0
Rejoignez-nous