2017-02-22 64 views
1

Я обрабатываю абзац, и для переноса слов я использую классы LineBreakMeasurer и TextLayout. Это фрагмент кода, который я использую, который легко доступен в Интернете:Изменение шрифта при рисовании абзаца в Java

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(), он работает как ожидалось.

Пожалуйста, помогите с этой проблемой.Спасибо заранее.

ответ

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