Spec-Zone .ru
спецификации, руководства, описания, API
|
Если бы у Вас есть абзац стилизованного текста, которому требуется соответствовать в пределах определенного width, можно использовать LineBreakMeasurer
class. Этот class позволяет разработанному тексту быть поврежденным в строки так, чтобы они соответствовали в пределах определенного визуального усовершенствования. Каждая строка возвращается как a TextLayout
объект, который представляет неизменный, разрабатывал символьные данные. Однако, этот class также включает доступу к информации о расположении. getAscent
и getDescent
методы TextLayout
возвратите информацию о шрифте, который используется, чтобы расположить строки в компонент. Текст сохранен как AttributedCharacterIterator
возразите так, чтобы шрифт и атрибуты размера точки могли быть сохранены текстом.
Следующий апплет располагает абзац стилизованного текста в пределах компонента, используя LineBreakMeasurer
, TextLayout
и AttributedCharacterIterator
.
Если Вы не видите, что апплет работает, Вы должны установить
Полный код для этого апплета находится в
.LineBreakSample.java
Следующий код создает 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
.