23

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)

このメソッドは四角形と四角形の上にテキストを描画する必要がありますが、このメソッドを実行するとすべてのグラフィックが回転し、テキストを回転させたいだけです..

ありがとう :)

4

4 に答える 4

28

このメソッド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);
于 2012-04-10T06:26:18.250 に答える
3

Rectangleオブジェクトを含めるために追加した次のコードがあります。長方形ではなく、テキストが回転していることがわかります。

Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

String s = "dasdasdasd1";

Font font = new Font("Courier", Font.PLAIN, 12);
g2d.translate(20, 20);

FontRenderContext frc = g2d.getFontRenderContext();

GlyphVector gv = font.createGlyphVector(frc, s);
int length = gv.getNumGlyphs();
Rectangle2D barra=new Rectangle2D.Double(0, 0, 700, 500);
g2d.draw(barra);
for (int i = 0; i < length; i++) {
  Point2D p = gv.getGlyphPosition(i);
  AffineTransform at = AffineTransform.getTranslateInstance(p.getX(), p.getY());
  at.rotate((double) i / (double) (length - 1) * Math.PI / 3);

  Shape glyph = gv.getGlyphOutline(i);
  Shape transformedGlyph = at.createTransformedShape(glyph);
  g2d.fill(transformedGlyph);
}

これで試すことができるかもしれません。

于 2012-04-10T06:26:29.963 に答える