2011-07-13 32 views
8

Estaba experimentando con Graphics2D en Java. Pero como de costumbre, estoy atascado. : P El problema es: Supongamos que tengo este código,Restablecer el objeto Graphics2D en Java

Graphics2D g=(Graphics2D)(this.getGraphics()); //Inside a JFrame 
g.rotate(Math.PI/8); 
g.drawLine(10, 20, 65, 80); 

//I want this one and all following lines to be drawn without any rotation 
g.drawLine(120, 220, 625, 180); 

¿Es posible ??? Sé que debe haber alguna forma pero no soy capaz de resolverlo. Por favor ayuda.

Respuesta

14

Lo que debes hacer es restaurar la transformación.

Trate

AffineTransform oldXForm = g.getTransform(); 
g.rotate(...); 
g.drawLine(...); 

g.setTransform(oldXForm); // Restore transform 
g.drawLine(...); 
+1

Además, se recomienda que utilice una copia del objeto de gráficos, en lugar del objeto gráfico en sí para evitar el ataque, ya que se usará en otro lugar. – mre

+0

¿puedes explicar? ¿Qué quieres decir con una paliza? –

+2

A veces ya tiene un objeto 'Graphics' y desea cambiar parte de su estado temporalmente y luego devolverlo a su estado original. Un enfoque es crear un nuevo objeto 'Graphics' que sea una copia del original y realizar cambios en esa copia. Esta técnica evita arruinar el estado del objeto original, del cual otras partes de Swing pueden depender. Puede que no sea aplicable en este caso, pero pensé que no estaría de más mencionarlo. :) – mre

4

llamada getTransform() (le da una copia), rotar, dibujar, y luego usar setTransform() para restaurar el estado. El docs for setTransform() incluso tiene un ejemplo.

Cuestiones relacionadas