Bonjour à tous, malgré les infos nombreuses, il y a quelque chose qui m'échappe...
L'objectif est de dessiner des formes simples dans le ContentPane, sur le click souris, grâce à un listener.
Le composant est un simple rectangle de couleur sombre, qui s'affiche à l'endroit du click. La classe est :
Au click de souris on lance l'écouteur :
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 import java.awt.Color; import java.awt.Graphics; import javax.swing.JComponent; /* * ICI ON DEFINIT LE COMPOSANT A AFFICHER */ public class Composant extends JComponent{ private static final long serialVersionUID = 1L; public Composant() { System.out.println("je suis dans le constructeur du composant"); } //---ré-écriture de "paintComponent" appelée à chaque création d'objet--- @Override protected void paintComponent(Graphics g) { super.paintComponent(g); //--- fond du contentPane en jaune + un rectangle sombre --- System.out.println("je débute dans le paintComponent à moi"); MyWindow.Contenu.setBackground(Color.YELLOW); g.setColor(new Color (100,100,100)); g.fillRect(ListenerW.x0, ListenerW.y0, 100, 100); System.out.println("j'ai fini le paintComponent à moi"); } }
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 import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class ListenerW implements MouseListener { static int x0,y0; @Override public void mouseClicked(MouseEvent e) { System.out.println("je débute dans le listenerW"); x0 = e.getX(); y0 = e.getY(); MyWindow.Contenu.add(new Composant() ); MyWindow.Contenu.repaint(); System.out.println("j'ai fini dans le listenerW"); }
Quand je clique sur le ContentPane, la fenetre de base, blanche s'affiche le message est le suivant sur la console :
je débute dans le listenerW
je suis dans le constructeur du composant
j'ai fini dans le listenerW
Question 1 : je suis bien passé par le constructeur Composant(), mais la fonction overide paintComponent (Graphics g) n'est pas exécutée à la construction de l'objet, puisque l'affichage console lié n'est pas apparent.
Il est pourtant indiqué que paintComponent est exécuté à chaque création d'objet.... Que se passe-t-il réellement?
Question 2 : Si je redimensionne la fenêtre après un clic , le fond jaune apparait alors, ce qui suppose que le paintComponent overide est appelé dans ce cas, (confirmation par affichage console lié) mais le rectangle sombre, pourtant définit au même endroit, n'apparait toujours pas. Pourquoi??
Merci à tous ceux qui éclaireront ma lanterne...
Partager