raf*_*uru 17 java awt graphics2d
我想使用Graphics2D在JPanel上旋转文本..
我的代码是这样的:
double paso=d.width/numeroBarras;
double alto=datos[i].valor;
Font fBarras=new Font("Serif", Font.PLAIN, 15);
g2.setFont(fBarras);
Rectangle2D barra=new Rectangle2D.Double(x,d.height-alto,paso,alto);
//g2.fill(barra);
x+=paso;
g2.draw(barra);
g2.rotate(-Math.PI/2);
g2.setColor(Color.BLACK);
g2.drawString(datos[i].titulo,(float)alto,(float)paso)
Run Code Online (Sandbox Code Playgroud)
此方法必须在矩形上绘制一个矩形和一个文本,但是当我运行此方法时,所有图形都会旋转,我只想旋转文本.
谢谢 :)
Tit*_*tus 26
此方法将旋转文本并将所有其他形状呈现相同.
Graphics2D g2 = (Graphics2D) g;
Font font = new Font(null, Font.PLAIN, 10);
AffineTransform affineTransform = new AffineTransform();
affineTransform.rotate(Math.toRadians(45), 0, 0);
Font rotatedFont = font.deriveFont(affineTransform);
g2.setFont(rotatedFont);
g2.drawString("A String",0,0);
g2.dispose();
Run Code Online (Sandbox Code Playgroud)
Mer*_*nne 24
该方法Graphics2D.rotate将变换应用于所有后续渲染操作.您可以getTransform()在应用旋转之前保留transform(with )的副本,然后还原原始文件.
g2.draw(barra);
AffineTransform orig = g2.getTransform();
g2.rotate(-Math.PI/2);
g2.setColor(Color.BLACK);
g2.drawString(datos[i].titulo,(float)alto,(float)paso);
g2.setTransform(orig);
Run Code Online (Sandbox Code Playgroud)
Dan*_*non 14
如果您不想使用此代码更好AffineTransform.
public static void drawRotate(Graphics2D g2d, double x, double y, int angle, String text)
{
g2d.translate((float)x,(float)y);
g2d.rotate(Math.toRadians(angle));
g2d.drawString(text,0,0);
g2d.rotate(-Math.toRadians(angle));
g2d.translate(-(float)x,-(float)y);
}
Run Code Online (Sandbox Code Playgroud)
用法:
drawRotate(g2d, 100, 100, 45, "hello world"); // 100x100px, 45 degree,
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29114 次 |
| 最近记录: |