1

私は非常にうまく動作JComponentする複数行の属性付き文字列を描画するを持っています:Textlayout

public static float drawMultiAttributedString(Graphics2D g2d, AttributedString str, String plainString, int maxWidth, int startX, float startY){

    FontRenderContext fontRenderCtx = g2d.getFontRenderContext();

    AttributedCharacterIterator attrCharIter = str.getIterator();
    LineBreakMeasurer lineBreakMeasurer = new LineBreakMeasurer(attrCharIter, fontRenderCtx);
    float x = startX;
    float y = startY;

    int next; 
    int limit; //länge bis zum nächsten umbruch
    int charat; 
    String tested = plainString;

    while (lineBreakMeasurer.getPosition() < attrCharIter.getEndIndex()) { 

          next = lineBreakMeasurer.nextOffset(maxWidth);
          limit = next;
          charat = tested.indexOf("\n", lineBreakMeasurer.getPosition()+1);
          if(next > (charat - lineBreakMeasurer.getPosition()) && charat != -1){
             limit = charat - lineBreakMeasurer.getPosition();
          }
          TextLayout layout = lineBreakMeasurer.nextLayout(maxWidth, lineBreakMeasurer.getPosition() + limit, false);

              y += layout.getAscent(); //höhe des haupttextes

          layout.draw(g2d, x, y);

          y += layout.getDescent() + layout.getLeading(); 
    }

    return y - startY;
}

問題は、Textlayout私が必要とするタブレータをレンダリングしないことです。タブレータも含める方法を知っている人はいますか? 何か案は?

どうもありがとう!

4

1 に答える 1

1

1JTableつまたは複数のカスタム レンダラーを使用する方が簡単な場合があります。DefaultTableCellRendererextends JLabelHTMLおよびロケール固有の書式設定を許可します。

于 2012-08-03T20:47:48.190 に答える