|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Если бы у Вас есть абзац стилизованного текста, которому требуется соответствовать в пределах определенного width, можно использовать LineBreakMeasurer class. Этот class позволяет разработанному тексту быть поврежденным в строки так, чтобы они соответствовали в пределах определенного визуального усовершенствования. Каждая строка возвращается как a TextLayout объект, который представляет неизменный, разрабатывал символьные данные. Однако, этот class также включает доступу к информации о расположении. getAscent и getDescent методы TextLayout возвратите информацию о шрифте, который используется, чтобы расположить строки в компонент. Текст сохранен как AttributedCharacterIterator возразите так, чтобы шрифт и атрибуты размера точки могли быть сохранены текстом.
Следующий апплет располагает абзац стилизованного текста в пределах компонента, используя LineBreakMeasurer, TextLayout и AttributedCharacterIterator.
Если Вы не видите, что апплет работает, Вы должны установить .
Полный код для этого апплета находится в
Следующий код создает iterator со строкой vanGogh. Запуск и конец iterator получаются и новое LineBreakMeasurer создается из iterator.
AttributedCharacterIterator paragraph = vanGogh.getIterator();
paragraphStart = paragraph.getBeginIndex();
paragraphEnd = paragraph.getEndIndex();
FontRenderContext frc = g2d.getFontRenderContext();
lineMeasurer = new LineBreakMeasurer(paragraph, frc);
Размер окна используется, чтобы определить, где строка должна повредиться. Также a TextLayout объект создается для каждой строки в абзаце.
// Set break width to width of Component.
float breakWidth = (float)getSize().width;
float drawPosY = 0;
// Set position to the index of the first
// character in the paragraph.
lineMeasurer.setPosition(paragraphStart);
// Get lines from until the entire paragraph
// has been displayed.
while (lineMeasurer.getPosition() < paragraphEnd) {
TextLayout layout = lineMeasurer.nextLayout(breakWidth);
// Compute pen x position. If the paragraph
// is right-to-left we will align the
// TextLayouts to the right edge of the panel.
float drawPosX = layout.isLeftToRight()
? 0 : breakWidth - layout.getAdvance();
// Move y-coordinate by the ascent of the
// layout.
drawPosY += layout.getAscent();
// Draw the TextLayout at (drawPosX,drawPosY).
layout.draw(g2d, drawPosX, drawPosY);
// Move y-coordinate in preparation for next
// layout.
drawPosY += layout.getDescent() + layout.getLeading();
}
TextLayout class не часто создается непосредственно приложениями. Однако, этот class полезен, когда приложения должны работать непосредственно с текстом, у которого были стили (текстовые атрибуты) примененный в определенных позициях в тексте. Например, чтобы потянуть отдельное слово, выделенное курсивом в абзаце, приложение должно было бы выполнить измерения и установить шрифт для каждой подстроки. Если текст двунаправлен, эту задачу не настолько легко сделать правильно. Создание a TextLayout объект от AttributedString объект решает эту проблему для Вас. Консультируйтесь с Java спецификация SE для получения дополнительной информации о TextLayout.