Spec-Zone .ru
спецификации, руководства, описания, API
След: 2-D Графика
Урок: Работа с текстовыми API
Раздел: Усовершенствованный текстовый Дисплей
Проведение Многократных Линий текста
Домашняя страница > 2-D Графика > Работа с текстовыми API

Проведение Многократных Линий текста

Если бы у Вас есть абзац стилизованного текста, которому требуется соответствовать в пределах определенного width, можно использовать LineBreakMeasurer class. Этот class позволяет разработанному тексту быть поврежденным в строки так, чтобы они соответствовали в пределах определенного визуального усовершенствования. Каждая строка возвращается как a TextLayout объект, который представляет неизменный, разрабатывал символьные данные. Однако, этот class также включает доступу к информации о расположении. getAscent и getDescent методы TextLayout возвратите информацию о шрифте, который используется, чтобы расположить строки в компонент. Текст сохранен как AttributedCharacterIterator возразите так, чтобы шрифт и атрибуты размера точки могли быть сохранены текстом.

Следующий апплет располагает абзац стилизованного текста в пределах компонента, используя LineBreakMeasurer, TextLayout и AttributedCharacterIterator.


Отметьте:  

Если Вы не видите, что апплет работает, Вы должны установить выпуск 6 (или позже) Java Комплект разработчика SE (JDK).


Полный код для этого апплета находится в 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.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Используя текстовые Атрибуты, чтобы Разработать текст
Следующая страница: Работа с Двунаправленным текстом