Java旋转文本具有反转字符序列

ecl*_*lux 6 java text awt graphics2d

JPanel我这样做的子类中:

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D)g;        
    g2d.rotate(Math.toRadians(90.));
    g2d.drawString(aString, 40, -40);
}
Run Code Online (Sandbox Code Playgroud)

字母正确旋转,但第二个字母不在第一个字母下方的预期位置(在其右侧,在旋转的空间中),但在其上方(在其左侧),第三个在上方(在左侧)该第二等改变旋转角度为45次的结果中的每个字符被旋转了45度的CW,如所预期,但字符的行被旋转45度CCW,这是与两个旋转中途是朝向结果为90度相一致.

在0度旋转时,文本正确显示.

我正在使用Mac OS X 10.8.2上的NetBeans 7.1.2进行开发.Win 7 SP1上的相同版本的NetBeans没有问题.

可能是什么导致了这个?

小智 0

从我现在所看到的来看,有两件事是可行的。

第一种方法是将字符串拆分为字符数组,然后在旋转之后逐一递增字体大小(如果加粗则为 +1 或 2),以便它们从上到下排列起来。

第二种方法是制作自己的字体,我不推荐这种方法。如果您在旋转之前绘制字符串,那么当它假设旋转时,如果您正确设置了字体,它将按应有的方式显示。

如果我能想到其他方法,我会发布它。

编辑:

final AffineTransform at = new AffineTransform();
final Font font = g.getFont();
// Derive a new font using a rotatation transform (Theta is angle in radians).
at.rotate(theta);
final Font newFont = font.deriveFont(at);
// set the derived font in the Graphics2D context
g2d.setFont(newFont);

// Render a label instance of type String using the derived font
g2d.drawString(label, x, y);
Run Code Online (Sandbox Code Playgroud)

因此,垂直绘制需要旋转 270 度,即 3/2 * pi