Bonjour!
Pas évident à formuler, l'intitulé...
Voici mon problème : j'aimerai faire un objet graphique, par exemple un Cercle. Pas de soucis pour faire une classe Cercle que je peux faire dessiner sur un composant "dessinable".
Ce que j'aimerai de plus, c'est pouvoir ajouter un écouteur d'évènements liés à la souris (la souris passe sur le composant, elle y entre, ...).
Plus en détails : imaginons, par exemple, qu'on veuille créer plusieurs objets Cercle, représentés en "drawOval()" (cercle vide) sur un JPanel, et que ces cercles se remplissent dès que la souris passe dedans...
Je sais qu'il y a moyen de le faire en faisant écouter les mouvements de la souris dans le JPanel et en faisant un test sur les coordonnées du curseur... Mais j'aimerai le faire autrement : que dès qu'un objet Cercle soit créé, un écouteur lui soit associé et indique si OUI ou NON la souris entre dans cet objet.
J'ai essayé en étendant la classe Component et en implémentant les interfaces MouseListener et MouseMotionListener, et en ajoutant l'objet comme son propre écouteur... Mais comme je m'y attendais, ça ne donne rien... J'ai essayé de plus de surcharger la méthode boolean contains(int x,int y) de Component, au cas où la JVM disait que la souris entre dedans dès que ses coordonnées sont contenues (donc via cette méthode), mais ... Ca ne donne rien non plus (et je m'y attendais aussi...)
Voici quand même un bout de code pour vous indiquer encore plus ce que je veux faire :
Je ne suis pas sur d'avoir été clair sur ce que je veux faire ... J'espère que oui ...
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 public class Cercle extends Component implements MouseListener, MouseMotionListener { int x , y , r; public Cercle(int _x , int _y , int _r) { x = _x; y = _y; r = _r; this.addMouseListener(this); this.addMouseMotionListener(this); } public boolean contains(int x,int y) { return (this.x-x)*(this.x-x)+(this.y-y)*(this.y-y)<=r*r; } public void paintComponent(Graphics g) { g.fillOval(x-r,y-r,2*r,2*r); } //MouseListener public void mouseClicked(MouseEvent e){ JOptionPane.showMessageDialog(null,"mouseClicked"); } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } public void mousePressed(MouseEvent e){ } public void mouseReleased(MouseEvent e){ } //MouseListener //MouseMotionListener public void mouseDragged(MouseEvent e){ } public void mouseMoved(MouseEvent e){ } //MouseMotionListener }
Merci d'avance à ceux qui pourront m'aider!
Partager