2010-11-04 35 views
1
void multiLine (int x, int y, String label, Graphics2D g) { 

    AffineTransform fontAT = new AffineTransform(); 
    Font theFont = g.getFont(); 
    fontAT.rotate(-Math.PI/2); 
    Font theDerivedFont = theFont.deriveFont(fontAT); 
    g.setFont(theDerivedFont); 

    AttributedString attrStr = new AttributedString(label); 
    // Get iterator for string: 
    AttributedCharacterIterator characterIterator = attrStr.getIterator(); 

    // Get font context from graphics: 
    FontRenderContext fontRenderContext = g.getFontRenderContext(); 

    // Create measurer: 
    LineBreakMeasurer measurer = new LineBreakMeasurer(characterIterator, 
      fontRenderContext); 

    while (measurer.getPosition() < characterIterator.getEndIndex()) { 
     TextLayout textLayout = measurer.nextLayout(200); 
     y += textLayout.getAscent(); //Have tried changing y to x 
     textLayout.draw(g, x, y); 

     y += textLayout.getDescent() + textLayout.getLeading(); //Have tried changing y to x 
    } 
    g.setFont(theFont); 

} 

我期待这样做可以垂直打印行,但它不会,关于如何解决此问题的任何想法。使用graphics2D包装/旋转图像上的文本

这输出文本水平包装。

编辑:更改了问题,以正确反映我正在尝试实现的目标

+0

它现在做了什么?看起来你正在画水平线。 – Khalos 2010-11-04 07:32:59

+0

是的,它绘制了水平线。 – kal 2010-11-04 07:33:59

回答

0

减少包装宽度。 200太大,所以它不包装。如果你想让每个字符放在一个新行中,请将它设置为0。

TextLayout textLayout = measurer.nextLayout(0); 
+0

我希望它也可以旋转,但是转换并没有考虑到这一点。 – kal 2010-11-04 15:52:27