2011-07-13 9 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

あなたは説明できますか? clobberingとはどういう意味ですか? –

+2

時には 'Graphics'オブジェクトを既に持っていて、その状態の一部を一時的に変更して元の状態に戻したいことがあります。 1つのアプローチは、オリジナルのコピーである新しい 'Graphics'オブジェクトを作成し、代わりにそのコピーを変更することです。この手法は、Swingの他の部分が依存している元のオブジェクトの状態を壊さないようにします。この場合は適用されないかもしれませんが、言いたいことはないと思いました! :) – mre

4

コールgetTransform()(あなたのコピーを与える)、回転、描画、および状態を復元するためにsetTransform()を使用してみてください。 docs for setTransform()にも例があります。

関連する問題