他の人からすでに与えられた答えとは別に、私は実用的なヒント、つまり弦や他のオブジェクトを回転させるときに通常適用するパターンを示したいと思います。
- を適用して、回転点(x、y)を空間の原点に移動し
translate(-x,-y)
ます。
- 回転を行います
rotate(angle)
(スケーリングもここで行われます)
- すべてを元のポイントに戻し
translate(x,y)
ます。
これらの手順を逆の順序で適用する必要があることを忘れないでください(trashgodの回答を参照)。
最初の変換を使用する文字列の場合、通常、バウンディングボックスの中心を原点に移動し、最後の変換を使用して、文字列を画面上の中心が表示される実際のポイントに移動します。そうすれば、好きな位置に文字列を描くことができます。
Rectangle2D r = g.getFontMetrics().getStringBounds(text, g);
g.translate(final_x, final_y);
g.rotate(-angle);
g.translate(-r.getCenterX(), -r.getCenterY());
g.drawString(text, 0, 0);
または代わりに
Rectangle2D r = g.getFontMetrics().getStringBounds(text, g);
AffineTransform trans = AffineTransform.getTranslateInstance(final_x, final_y);
trans.concatenate(AffineTransform.getRotateInstance(-angle));
trans.concatenate(AffineTransform.getTranslateInstance(-r.getCenterX(), -r.getCenterY()));
g.setTransform(trans);
g.drawString(text, 0, 0);