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