Frage

Ich möchte ein Rechteck um seinen Mittelpunkt drehen und es sollte an der Stelle bleiben, an der es gezeichnet werden soll, und in diesem Raum rotieren

das ist mein Code:

AffineTransform transform = new AffineTransform();

    transform.rotate(Math.toRadians(45),rectangle.width/2, rectangle.height/2);
    Shape transformed = transform.createTransformedShape(rectangle);
    g2.fill(transformed)

Das Rechteck ist gedreht, wird aber an einer anderen Stelle des Bildschirms gezeichnet. Wie kann ich das korrigieren?

War es hilfreich?

Lösung

Ich habe das noch nicht ausprobiert, aber es sieht so aus, als ob Sie nicht die richtige Mitte des Rechtecks ​​erhalten.Versuchen:

AffineTransform transform = new AffineTransform();
transform.rotate(Math.toRadians(45), rectangle.getX() + rectangle.width/2, rectangle.getY() + rectangle.height/2);
g2.fill(transformed);

Der Unterschied besteht darin, dass Sie jetzt die Breite zum Start-X-Punkt und die Höhe zum Start-Y-Punkt addieren, also die Mitte des Rechtecks.

Hoffe das hilft.

Andere Tipps

AffineTransform transform = new AffineTransform();
transform.rotate(theta, rect.getX() + rect.width/2, rect.getY() + rect.height/2);
AffineTransform old = g2.getTransform();
g2.transform(transform);

// draw your rectangle here...

g2.setTransfrom(old);

Wenn Sie es so tun, ist es möglich, ein fortschrittlicheres Rechteck zu zeichnen. Zum Beispiel mit einer Gradientenfüllung oder einem Text im Rechteck. Alles wird damit drehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top