import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import javax.swing.JFrame; import javax.swing.JPanel; /** * Tries to reproduce a bug related to a translate and rotate operation on a * GraphcisContext. If successful, you will see the String "Hello World" not * only painted on the left side but also on the right edge of the panel. * <p> * * @author Achim Westermann * */ public class AffineTransformBug extends JPanel { /** * Generated <code>serialVersionUID</code>. */ private static final long serialVersionUID = 700262412146835398L; /** * @see javax.swing.JComponent#paint(java.awt.Graphics) */ @Override public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) g; String title = "Hello World"; int titleStartX = 20; int titleStartY = this.getHeight() / 2; // store former transform for later restore: AffineTransform tr = g2d.getTransform(); AffineTransform at = g2d.getDeviceConfiguration().getDefaultTransform(); at.translate(titleStartX, titleStartY); g2d.setTransform(at); g2d.drawString(title, 0, 0); g2d.setTransform(tr); } public static void main(String[] args) { JFrame frame = new JFrame(AffineTransform.class.getName()); frame.getContentPane().add(new AffineTransformBug()); frame.setSize(new Dimension(400, 400)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); System.out.println("Going to resize the window to xy in 1 seconds..."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } frame.setSize(new Dimension(433, 400)); System.out.println("Resize done!"); System.out.println("Going to resize the window to xy in 1 seconds..."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } frame.setSize(new Dimension(450, 400)); System.out.println("Resize done!"); } }