除了其他人已经给出的答案之外,我想展示一个实用的技巧,即我通常在旋转字符串或其他对象时应用的模式:
- 通过应用 将旋转点 (x,y) 移动到空间原点
translate(-x,-y)
。
- 进行旋转
rotate(angle)
(也可能在此处进行缩放)
- 将所有内容移回原点
translate(x,y)
。
请记住,您必须以相反的顺序应用这些步骤(请参阅垃圾神的答案)。
对于第一次翻译的字符串,我通常将边界框的中心移动到原点,最后一次翻译将字符串移动到屏幕上应该出现中心的实际点。然后我可以简单地在我喜欢的任何位置绘制字符串。
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);