Bonjour à tous !
Voilà mon problème :
je crée un composant "Cercle" qui étend la classe Component : je veux qu'un objet Cercle soit dessinable. Pas trop difficile, jusque là. De plus, je veux qu'il soit à l'écoute-souris de lui-même, par exemple pour que quand la souris passe dessus il change sa couleur...
Voici le code de ma classe Cercle :
A priori, ça marche ... Je le prouve dans ce 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Cercle extends JComponent implements MouseListener, MouseMotionListener{ int x , y , r; boolean couleurSwap; public Cercle(int _x , int _y , int _r) { addMouseListener(this); addMouseMotionListener(this); x = _x;//Abscisse du centre y = _y;//Ordonnée du centre r = _r; couleurSwap = true; } public boolean contains(int x,int y){ return (Math.sqrt((this.x-x)*(this.x-x)+(this.y-y)*(this.y-y))<=r); } public void paint(Graphics g){ if( couleurSwap ){ g.setColor( Color.BLUE ); } else{ g.setColor( Color.RED ); } g.fillOval(x-r,y-r,2*r,2*r); } //MouseListener public void mouseClicked(MouseEvent e){ } public void mouseEntered(MouseEvent e){ couleurSwap = ! couleurSwap; repaint(); } public void mouseExited(MouseEvent e){ couleurSwap = ! couleurSwap; repaint(); } public void mousePressed(MouseEvent e){ } public void mouseReleased(MouseEvent e){ } //MouseListener //MouseMotionListener public void mouseDragged(MouseEvent e){ } public void mouseMoved(MouseEvent e){ } //MouseMotionListener }
Le problème arrive ici : en refaisant quasi la même chose que le code ci-dessus, si ce n'est que le dessin se fait dans une autre classe : Panneau (qui étend JPanel). Et puis le contentPane de la Frame est un objet Panneau :
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.*; public class Ex{ private JFrame f; public Ex(){ f = new JFrame("Prog"); f.getContentPane().add(new Cercle(100,100,50)); f.pack(); f.setVisible(true); } }
Classe Panneau :
Classe ExAvecPanneau :
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 import javax.swing.*; import java.awt.*; public class Panneau extends JPanel{ Cercle c; public Panneau(){ c = new Cercle(100,100,65); add(c); repaint(); } public void paint(Graphics g){ super.paint(g); c.paint(g); } }
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.*; public class ExAvecPanneau{ private JFrame f; public ExAvecPanneau(){ f = new JFrame("Prog"); f.setContentPane(new Panneau()); f.pack(); f.setVisible(true); } }
Pourquoi cela ne marche-t-il pas dans ce code ?
En fait, l'objet Cercle qui est dans le Panneau (= contentPane de la Frame) n'est pas écouté! Pourquoi ?
Merci !
Partager