# Grafikobjekt drehen



## GideFix (16. Dez 2010)

Halle ich schätze dieses oder ein ähnliches Thema wurde schon erstellt aber ich habs mit der Suche nicht gefunden :S

Wie dreht man in Java ein einfache Grafikobjekt wie zum Beispiel ein Rechteckt?!

Danke schonmal im voraus!


----------



## eRaaaa (16. Dez 2010)

Transforming Shapes, Text, and Images (The Java™ Tutorials > 2D Graphics > Advanced Topics in Java2D)


----------



## GideFix (16. Dez 2010)

ich versteh nicht auf was diese methoden angewendet werden sollen :S
könnten ihr vll ne beispiel methode schreiben, die einfach ein quader um 45 grad dreht?

Das Problem ist halt, dass ich diese komsiche graphics2d klasse nicht verstehe, da wir sowas in der schule nie behandelt haben...


----------



## eRaaaa (16. Dez 2010)

Ein Beispiel hast du doch da? (http://download.oracle.com/javase/tutorial/2d/advanced/examples/Transform.java)

Ein paar mehr Infos wären halt auch nicht schlecht. DU kannst nicht von jmd hier erwarten dass er dir hier ein Beispiel von x Zeilen schreibt, wenn deine Eingangsbeschreibung gerade mal in einer Frage verpackt ist.
Wie malst du denn bisher? Und was genau verstehst du nicht?


----------



## GideFix (16. Dez 2010)

Tut mir leid jetzt mehr infos :
Also...
Bisher haben wir in der schule ungefähr so gemalt:
Wir haben einfach ein graphics Objekt genommen und dann sowas wie dieses in die paint methode gemach:

public void paint (Graphics stift){
sitft.drawrect (100,100,200,200)}

Jetzt haben wir vom Lehrer die Aufgabe bekomme ein gemaltes polygon um einen bestimmten Winkel zu drehen.
Ich habe allerdings keine Ahnung wo ich anfangen soll...
Ich hoffe ihr könnt mir helfen :S


----------



## eRaaaa (16. Dez 2010)

Anfangen solltest du im Lesen von dem o.g. Link 
Denn dort ist alles beschrieben.
Sagen wir du hast ein Polygon -> ein einfaches Rechteck:

```
private Polygon s = new Polygon(new int[]{0,100,100,0}, new int[]{0, 0, 100, 100}, 4);
```
dieses willst du nun in deiner paint(Component) drehen und evtl. vorher verschieben, dann erstellst du ein AffineTransform-Objekt und rufst dort eben dann die Methode rotate oder translate auf und setzt anschließend dieses Objekt mit setTransform an dem Graphics-Objekt. Vorher evtl. die aktuelle Transformation speichern, indem du dir diese mit getTransform holst!
Da die setTransform Methode nicht in der abstrakten Klasse Graphics bereit steht, musst du das Graphics-Objekt zuvor auf Graphics2D casten.
Hier noch einmal ein minimales Beispiel, das evlt. übersichtlicher ist als das Verlinkte

```
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.geom.AffineTransform;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TransformDemo {
	
	private Polygon s = new Polygon(new int[]{0,100,100,0}, new int[]{0, 0, 100, 100}, 4);

	public TransformDemo(){
		JFrame frame = new JFrame();
		JPanel panel = new JPanel(){
			@Override
			protected void paintComponent(Graphics g) {
				super.paintComponent(g);
				g.fillPolygon(s);
				//demo:
				g.setColor(Color.RED);
				g.drawString("hallo", 10, 10);
				Graphics2D g2d = (Graphics2D) g;
				AffineTransform at = new AffineTransform();
				at.translate(100, 0); //verschiebe auf x achse um 100
				at.rotate(Math.toRadians(45)); //rotiere um 45 grad
				g2d.setTransform(at); // <---
				g.fillPolygon(s);
				g.setColor(Color.BLACK);
				g.drawString("hallo", 10, 10);
			}
		};
		frame.add(panel);
		frame.setSize(200, 200);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new TransformDemo();
			}
		});
	}
}
```


----------



## GideFix (16. Dez 2010)

ich versteh zwar nicht was ein AffineTransform-Objekt ist aber danke !


----------

