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);
    }