2011-07-13 46 views
8

Tôi đã thử nghiệm với Graphics2D trong Java. Nhưng như thường lệ, tôi bị mắc kẹt. : P Vấn đề là: Giả sử tôi có mã này,Đặt lại đối tượng Graphics2D trong 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); 

Có thể ??? Tôi biết phải có cách nào đó nhưng tôi không thể hình dung ra được. Hãy giúp tôi.

Trả lời

14

Điều bạn sẽ muốn làm là khôi phục biến đổi.

Hãy thử

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

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

Ngoài ra, bạn nên sử dụng một bản sao của đối tượng đồ họa, chứ không phải là đối tượng đồ họa để tránh bị che dấu vì điều này sẽ được sử dụng ở nơi khác. – mre

+0

bạn có thể giải thích được không ?? bạn có ý nghĩa gì bởi clobbering? –

+2

Đôi khi bạn đã có đối tượng 'Graphics' và bạn muốn tạm thời thay đổi một số trạng thái của nó và sau đó trả về trạng thái ban đầu của nó. Một cách tiếp cận là tạo một đối tượng 'Graphics' mới, là bản sao của bản gốc và thay vào đó là thay đổi bản sao đó. Kỹ thuật này tránh clobbering trạng thái của đối tượng ban đầu, mà các phần khác của Swing có thể phụ thuộc vào. Nó có thể không được áp dụng trong trường hợp này, nhưng tôi nghĩ rằng nó sẽ không làm tổn thương đề cập đến! :) – mre

4

Gọi getTransform() (cung cấp cho bạn một bản sao), xoay, vẽ, và sau đó sử dụng setTransform() để khôi phục lại nhà nước. docs for setTransform() thậm chí có một ví dụ.

Các vấn đề liên quan