如何在Java中使用Graphics2D旋转文本?

2022-09-01 19:41:25

我想使用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)

此方法必须在矩形上绘制一个矩形和文本,但是当我运行此方法时,所有图形都会旋转,我只想旋转文本。

谢谢:)


答案 1

此方法将旋转文本,并将呈现所有其他形状相同。

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();

答案 2

方法 Graphics2D.rotate 将转换应用于所有后续呈现操作。您可以在应用旋转之前保留转换的副本(使用 getTransform()),然后还原原始副本。

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);

推荐