Bonjour,
Voilà le problème qui me tient à coeur.
Pour faire aussi simple que possible, J'ai une JFrame qui contient une JToolBar à sa place habituelle (BorderLayout.NORTH) et un JPanel en-dessous (BorderLayout.CENTER).
Je redéfinie paintComponent() du JPanel de la manière suivante :
1) Je translate le contexte graphique : g2D.translate(100,0);
2) Je fais appel à createInverse pour rétablir g2D à l'AffineTransform de départ (qui redevient donc l'identité).
3) je fais g2D.drawLine(0, 0, 100, 100);
voir code ci-dessous pour plus de détail.
Alors, ma ligne devrait être tracée depuis l'origine du JPanel en haut à gauche du JPanel. Eh bien NON !!!
Elle est tracée à partir du haut (à gauche) de la barre d'outil. Comme si l'origine n'était pas revenu à l'origine du JPanel mais à l'origine du JFrame.
Donc, que s'est-il passé ?
Merci beaucoup...
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 @Override protected void paintComponent(Graphics g) { Graphics2D g2D = (Graphics2D)g.create(); super.paintComponent(g2D); g2D.translate(100, 0); AffineTransform saveAT = g2D.getTransform(); try{ g2D.transform(g2D.getTransform().createInverse()); } catch (NoninvertibleTransformException ex) {} g2D.drawLine(0, 0, 100, 100); g2D.setTransform(saveAT); }
Partager