Bonjour,
voilà le problème que je n'arrive pas à démêler :
Pour faire le plus simple possible :
J'ai une fenêtre qui contient une barre d'outil et un JPanel.
Dans ma méthode redéfinie paintComponent() je mets au début :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
super.paintComponent( g );
Graphics2D g2D = (Graphics2D) g;
System.out.println( g2D.getTransform() );
Après le lancement de l'application la fenêtre de sortie me renvoie :

AffineTransform[[1.0, 0.0, 0.0], [0.0, 1.0, 43.0]].

43 étant l'épaisseur de ma barre d'outil. Ce qui signifie, si j'ai bien compris, qu'en interne, sans rien dire, le contexte graphique passé à paintComponent à déjà subit une translation pour mettre l'origine en haut à gauche du panneau, il a donc tenu compte de l'épaiseur de la barre d'outil.
Bon très bien,

Maintenant, J'ai créé une classe interne au JPanel qui s'appelle EcouteurPanneau et qui est destinée à écouter le Panneau comme son nom l'indique. Elle implémente mouseClicked. Je veux bien sûr appeler repaint() depuis mouseClicked() pour rafraichir le panneau. Ainsi je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Jpanel.this.repaint();
Et là surprise : quand je clique dans le panneau, mon instruction:
System.out.println( g2D.getTransform() );
me renvoie maintenant :
AffineTransform[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]

Là, je ne comprends plus. maintenant, pourquoi le contexte graphique n'a plus la même origine ?
C'est pourtant toujours le même paintComponent qui est appelé puisque mon instruction System.out.println( g2D.getTransform() ); me renvoie quelque chose !!!

Encore plus fort :
Si, maintenant, je rajoute dans mouseClicked ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
System.out.println( "avant repaint" );
PanneauDessin.this.repaint();
System.out.println( "après repaint" );
et maintenant je clique, voilà ce que j'obtiens:

avant repaint
après repaint
AffineTransform[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]

Alors là, c'est incompréhensible !
La dernière ligne devrait être entre "Avant repaint" et "après repaint" , non ?
Que se passe-t-il ?
Je suis perdu avec ces histoires de contexte graphique...
Merci pour vos explications.