2011-07-13 53 views
8

我正在用Java中的Graphics2D進行實驗。但像往常一樣,我被卡住了。 :P問題是: 假設我有這樣的代碼,重置Java中的Graphics2D對象

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); 

是否有可能???我知道必須有某種方式,但我無法弄清楚。請幫忙。

回答

14

你想要做的是恢復變換。

嘗試

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

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

此外,建議您使用圖形對象的副本,而不是圖形對象本身以避免破壞,因爲這將在其他地方使用。 – mre

+0

你能解釋一下嗎?你是什​​麼意思的破壞? –

+2

有時你已經有了一個'Graphics'對象,你想暫時改變它的一些狀態,然後將它返回到它的原始狀態。一種方法是創建一個新的'Graphics'對象,它是原始對象的副本,並對該副本進行更改。這種技術避免了破壞Swing其他部分可能依賴的原始對象的狀態。這可能不適用於這種情況,但我認爲它不會提及! :) – mre

4

呼叫getTransform()(給你一個副本),旋轉,畫,然後用setTransform()來恢復狀態。 docs for setTransform()甚至有一個例子。