package javacodebook.media.graphic.transform; import java.awt.*; import java.awt.geom.*; import javax.swing.*; /** * Ein Panel, auf dem ein Bild um 45° gedreht dargestellt wird. */ public class RotatingImagePanel extends javax.swing.JPanel { private Image image; public void paintComponent(Graphics graphics) { super.paintComponent(graphics); Graphics2D g = (Graphics2D)graphics; //Nullpunkt in die Mitte verlegen g.translate(getWidth()/2, getHeight()/2); //Koordinatensystem um 45° im Uhrzeigersinn rotieren g.rotate(Math.toRadians(45)); //Rechtech gedreht zeichnen g.drawImage(image, -image.getWidth(this)/2, -image.getHeight(this)/2, this); } public Dimension getPreferredSize() { return new Dimension(640,480); } public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().setLayout(new BorderLayout()); RotatingImagePanel panel = new RotatingImagePanel(); f.getContentPane().add(panel); ImageIcon icon = new ImageIcon(panel.getClass().getClassLoader(). getSystemResource("javacodebook/media/graphic/transform" +"/sonnenaufgang.jpg")); panel.image = icon.getImage(); f.pack(); f.show(); } } --- Neue Klasse --- package javacodebook.media.graphic.transform; import java.awt.*; import java.awt.geom.*; import javax.swing.*; /** * Ein Panel, mit dem demonstriert wird, wie eine Drehung ausgeführt wird. */ public class RotatingPanel extends javax.swing.JPanel { public void paintComponent(Graphics graphics) { super.paintComponent(graphics); Graphics2D g = (Graphics2D)graphics; //Nullpunkt in die Mitte verlegen g.translate(getWidth()/2, getHeight()/2); //Koordinatensystem um 45° im Uhrzeigersinn rotieren g.rotate(Math.toRadians(45)); //Rechtech gedreht zeichnen g.draw(new Rectangle2D.Double(0, 0, 80,50)); } public Dimension getPreferredSize() { return new Dimension(200,200); } public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().setLayout(new BorderLayout()); f.getContentPane().add(new RotatingPanel()); f.pack(); f.show(); } } --- Neue Klasse --- package javacodebook.media.graphic.transform; import java.awt.*; import java.awt.geom.*; import javax.swing.*; /** * Ein Beispiel zur Skalierung von Grafikobjekten. */ public class ScalingPanel extends javax.swing.JPanel { public void paintComponent(Graphics graphics) { super.paintComponent(graphics); Graphics2D g = (Graphics2D)graphics; //Nullpunkt in die Mitte verlegen g.translate(getWidth()/2, getHeight()/2); //Größe der weiteren Grafik-Ausgaben verändern. Alle x-Koordinaten //werden mit 3 multipliziert, alle y-Koordinaten mit 2 g.scale(3, 2); //Das Rechteck wird mit dreifacher Seitenlänge und doppelter Strichstärke //gezeichnet! g.draw(new Rectangle2D.Double(-25, -25, 50,50)); } public Dimension getPreferredSize() { return new Dimension(320,200); } public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().setLayout(new BorderLayout()); f.getContentPane().add(new ScalingPanel()); f.pack(); f.show(); } } --- Neue Klasse --- package javacodebook.media.graphic.transform; import java.awt.*; import java.awt.geom.*; import javax.swing.*; /** * */ public class ShearingPanel extends javax.swing.JPanel { public void paintComponent(Graphics graphics) { super.paintComponent(graphics); Graphics2D g = (Graphics2D)graphics; g.shear(0.5, 0); g.draw(new Rectangle2D.Double(50, 30, 80,50)); } public Dimension getPreferredSize() { return new Dimension(200,200); } public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().setLayout(new BorderLayout()); f.getContentPane().add(new ShearingPanel()); f.pack(); f.show(); } } --- Neue Klasse --- package javacodebook.media.graphic.transform; import java.awt.*; import java.awt.geom.*; import javax.swing.*; /** * Verschieben des Koordinatensystems zum Zeichnen. */ public class TranslatingPanel extends javax.swing.JPanel { public void paintComponent(Graphics graphics) { super.paintComponent(graphics); //Das Graphics-Objekt in ein Graphics2D-Objekt casten, das es ja auch ist Graphics2D g = (Graphics2D)graphics; //Den Nullpunkt in die Mitte verschieben g.translate(getWidth()/2,getHeight()/2); //Ein Rechteck um den Mittelpunkt herum zeichnen g.draw(new Rectangle2D.Double(-25,-25, 50,50)); } public Dimension getPreferredSize() { return new Dimension(200,200); } public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().setLayout(new BorderLayout()); f.getContentPane().add(new TranslatingPanel()); f.pack(); f.show(); } }