在Java中绘制段落时更改字体

时间:2017-02-22 17:08:38

标签: java layout graphics fonts draw

我正在渲染一个段落,对于自动换行,我正在使用LineBreakMeasurerTextLayout类。 这是我正在使用的片段,可以在线轻松获取:

 void drawParagraph(Graphics2D g, String paragraph, float width) {
    LineBreakMeasurer linebreaker = new LineBreakMeasurer(new AttributedString(paragraph)
        .getIterator(), g.getFontRenderContext());

    int y = 0;
    while (linebreaker.getPosition() < paragraph.length()) {
      TextLayout textLayout = linebreaker.nextLayout(width);

      y += textLayout.getAscent();
      textLayout.draw(g, 0, y);
      y += textLayout.getDescent() + textLayout.getLeading();
    }
  }

但是,当我尝试更改字体时,我遇到了问题。 虽然我通过调用g.setFont(new Font(...))来更改字体,但段落不会以该字体呈现。但是,当我尝试使用g.drawString()时,它正在按预期工作。

请帮我解决这个问题。提前谢谢你。

1 个答案:

答案 0 :(得分:0)

在AttributedString中设置字体。例如:

AttributedString text = new AttributedString(paragraph);

Font emphasis = new Font(Font.SERIF, Font.BOLD, 12);
int emphasisStart = 30;
int emphasisEnd = 42;
text.addAttribute(TextAttribute.FONT, emphasis, emphasisStart, emphasisEnd);

LineBreakMeasurer linebreaker =
    new LineBreakMeasurer(text.getIterator(), g.getFontRenderContext());