Класс TextLayout

Все реализуемые интерфейсы:
Cloneable
public final class TextLayout
extends Object
implements Cloneable

TextLayout — это неизменяемое графическое представление стилизованных данных символов.

Он предоставляет следующие возможности:

  • неявный анализ и переупорядочение в соответствии с направлением письма,
  • позиционирование и перемещение курсора, включая разделение курсора для текста с смешанным направлением,
  • выделение, включая логическое и визуальное выделение для текста со смешанным направлением,
  • несколько базовых линий (римская, подвешенная и центрированная),
  • проверка попадания,
  • выравнивание,
  • замена шрифтов по умолчанию,
  • метрическая информация, такая как восходящая, нисходящая и продвижение, и
  • отображение

Объект TextLayout может быть отображён с помощью его метода draw.

Объект TextLayout может быть создан либо напрямую, либо с помощью LineBreakMeasurer. При прямом создании исходный текст представляет собой один абзац. LineBreakMeasurer позволяет разбивать стилизованный текст на строки, которые помещаются в определённую ширину. Дополнительную информацию см. в документации LineBreakMeasurer.

Создание объекта TextLayout логически происходит следующим образом:

  • экстрагируются и анализируются атрибуты абзаца,
  • текст анализируется на переупорядочение в соответствии с направлением письма, и информация о переупорядочении вычисляется, если необходимо,
  • текст сегментируется на блоки стиля,
  • для блоков стиля выбираются шрифты, сначала используется шрифт, если присутствует атрибут TextAttribute.FONT, в противном случае вычисляется шрифт по умолчанию с использованием определённых атрибутов,
  • если текст находится на нескольких базовых линиях, блоки или подблоки разбиваются на подблоки, которые используют общую базовую линию,
  • для каждого блока генерируются векторы глифов с использованием выбранного шрифта,
  • выполняется окончательное переупорядочение в соответствии с направлением письма для векторов глифов

Вся графическая информация, возвращаемая методами объекта TextLayout, относится к началу системы координат объекта TextLayout, которая является пересечением базовой линии объекта TextLayout с его левым краем. Кроме того, координаты, передаваемые в методы объекта TextLayout, предполагается относительными к началу системы координат объекта TextLayout. Клиентам обычно необходимо выполнять преобразование между системой координат объекта TextLayout и системой координат другого объекта (например, объекта Graphics).

Объекты TextLayout создаются на основе стилизованного текста, но они не сохраняют ссылку на исходный текст. Таким образом, изменения в тексте, ранее использованном для генерации объекта TextLayout, не влияют на объект TextLayout.

Три метода объекта TextLayout (getNextRightHit, getNextLeftHit, и hitTestChar) возвращают экземпляры TextHitInfo. Смещения, содержащиеся в этих объектах TextHitInfo, относительны к началу объекта TextLayout, а не к тексту, используемому для создания объекта TextLayout. Аналогично, методы TextLayout, принимающие объекты TextHitInfo в качестве параметров, ожидают, что смещения объекта TextHitInfo будут относительными к началу объекта TextLayout, а не к какому-либо базовому хранилищу текста.

Примеры:

Создание и отрисовка объекта TextLayout и его ограничительной прямоугольной области:

Graphics2D g = ...;
Point2D loc = ...;
Font font = Font.getFont("Helvetica-bold-italic");
FontRenderContext frc = g.getFontRenderContext();
TextLayout layout = new TextLayout("This is a string", font, frc);
layout.draw(g, (float)loc.getX(), (float)loc.getY());

Rectangle2D bounds = layout.getBounds();
bounds.setRect(bounds.getX()+loc.getX(),
               bounds.getY()+loc.getY(),
               bounds.getWidth(),
               bounds.getHeight());
g.draw(bounds);

Проверка попадания в объект TextLayout (определение символа в конкретной графической позиции):

Point2D click = ...;
TextHitInfo hit = layout.hitTestChar(
                      (float) (click.getX() - loc.getX()),
                      (float) (click.getY() - loc.getY()));

Отклик на нажатие правой стрелки:

int insertionIndex = ...;
TextHitInfo next = layout.getNextRightHit(insertionIndex);
if (next != null) {
    // translate graphics to origin of layout on screen
    g.translate(loc.getX(), loc.getY());
    Shape[] carets = layout.getCaretShapes(next.getInsertionIndex());
    g.draw(carets[0]);
    if (carets[1] != null) {
        g.draw(carets[1]);
    }
}

Отрисовка области выделения, соответствующей подстроке в исходном тексте. Выделенная область может не быть визуально непрерывной:

// selStart, selLimit should be relative to the layout,
// not to the source text

int selStart = ..., selLimit = ...;
Color selectionColor = ...;
Shape selection = layout.getLogicalHighlightShape(selStart, selLimit);
// selection may consist of disjoint areas
// graphics is assumed to be translated to origin of layout
g.setColor(selectionColor);
g.fill(selection);

Отрисовка визуально непрерывной области выделения. Область выделения может соответствовать более чем одной подстроке в исходном тексте. Диапазоны соответствующих подстрок исходного текста можно получить с помощью getLogicalRangesForVisualSelection():

TextHitInfo selStart = ..., selLimit = ...;
Shape selection = layout.getVisualHighlightShape(selStart, selLimit);
g.setColor(selectionColor);
g.fill(selection);
int[] ranges = getLogicalRangesForVisualSelection(selStart, selLimit);
// ranges[0], ranges[1] is the first selection range,
// ranges[2], ranges[3] is the second selection range, etc.

Примечание: Поворот шрифта может вызвать поворот базовых линий текста, а несколько блоков с различными поворотами могут привести к искривлению или зигзагообразности базовой линии. Чтобы учесть эту (редкую) возможность, некоторые API разработаны для возвращения метрик и использования параметров «в координатах, относительных к базовой линии» (например, восходящая, продвижение), а другие — в «стандартных координатах» (например, getBounds). Значения в координатах, относительных к базовой линии, отображают координату «x» как расстояние вдоль базовой линии (положительная x — вперёд вдоль базовой линии), а координату «y» — как расстояние вдоль перпендикуляра к базовой линии в точке «x» (положительная y — на 90 градусов по часовой стрелке от вектора базовой линии). Значения в стандартных координатах измеряются вдоль осей x и y, причём 0,0 находится в начале координат объекта TextLayout. Документация для каждого соответствующего API указывает, какие значения находятся в какой системе координат. В целом, API, связанные с измерениями, находятся в координатах, относительных к базовой линии, а API, связанные с отображением, — в стандартных координатах.

См. также:
LineBreakMeasurer, TextAttribute, TextHitInfo, LayoutPath

Вложенные классы

Модификатор и тип Класс Описание
static class  TextLayout.CaretPolicy

Определяет политику для определения сильного расположения курсора.

Поля

Модификатор и тип Поле Описание
static TextLayout.CaretPolicy DEFAULT_CARET_POLICY

Этот CaretPolicy используется, когда клиент не задаёт политику.

Конструкторы

Конструктор Описание
TextLayout​(String string, Font font, FontRenderContext frc)

Создаёт объект TextLayout из объекта String и объекта Font.

TextLayout​(String string, Map<? extends AttributedCharacterIterator.Attribute,​?> attributes, FontRenderContext frc)

Создаёт объект TextLayout из объекта String и набора атрибутов.

TextLayout​(AttributedCharacterIterator text, FontRenderContext frc)

Создаёт объект TextLayout из итератора по стилизованному тексту.

Методы

Модификатор и тип Метод Описание
protected Object clone()

Создаёт копию этого TextLayout.

void draw​(Graphics2D g2, float x, float y)

Отображает этот TextLayout в указанном месте в указанном контексте Graphics2D.

boolean equals​(TextLayout rhs)

Возвращает true, если два макета равны.

float getAdvance()

Возвращает отступ этого TextLayout.

float getAscent()

Возвращает восходящую часть этого TextLayout.

byte getBaseline()

Возвращает базовую линию для этого TextLayout.

float[] getBaselineOffsets()

Возвращает массив смещений для базовых линий, используемых для этого TextLayout.

Shape getBlackBoxBounds​(int firstEndpoint, int secondEndpoint)

Возвращает рамки чёрного ящика символов в указанном диапазоне.

Rectangle2D getBounds()

Возвращает рамки этого TextLayout.

float[] getCaretInfo​(TextHitInfo hit)

Возвращает информацию о курсоре, соответствующем hit.

float[] getCaretInfo​(TextHitInfo hit, Rectangle2D bounds)

Возвращает информацию о курсоре, соответствующем hit.

Shape getCaretShape​(TextHitInfo hit)

Возвращает Shape, представляющий курсор в указанной позиции внутри естественных границ этого TextLayout.

Shape getCaretShape​(TextHitInfo hit, Rectangle2D bounds)

Возвращает Shape, представляющий курсор в указанной позиции внутри указанных границ.

Shape[] getCaretShapes​(int offset)

Возвращает две траектории, соответствующие сильному и слабому курсорам.

Shape[] getCaretShapes​(int offset, Rectangle2D bounds)

Возвращает две траектории, соответствующие сильному и слабому курсорам.

Shape[] getCaretShapes​(int offset, Rectangle2D bounds, TextLayout.CaretPolicy policy)

Возвращает две траектории, соответствующие сильному и слабому курсорам.

int getCharacterCount()

Возвращает количество символов, представленных этим TextLayout.

byte getCharacterLevel​(int index)

Возвращает уровень символа в позиции index.

float getDescent()

Возвращает нисходящую часть этого TextLayout.

TextLayout getJustifiedLayout​(float justificationWidth)

Создаёт копию этого TextLayout, выровненную по указанной ширине.

LayoutPath getLayoutPath()

Возвращает LayoutPath или null, если траектория макета является стандартной траекторией (x отображается на отступ, y отображается на смещение).

float getLeading()

Возвращает межстрочный интервал TextLayout.

Shape getLogicalHighlightShape​(int firstEndpoint, int secondEndpoint)

Возвращает Shape, охватывающий логический выделенный фрагмент в указанном диапазоне, расширенный до естественных границ этого TextLayout.

Shape getLogicalHighlightShape​(int firstEndpoint, int secondEndpoint, Rectangle2D bounds)

Возвращает Shape, охватывающий логический выделенный фрагмент в указанном диапазоне, расширенный до указанных bounds.

int[] getLogicalRangesForVisualSelection​(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)

Возвращает логические диапазоны текста, соответствующие визуальному выделению.

TextHitInfo getNextLeftHit​(int offset)

Возвращает позицию для следующего курсора влево (вверх); если такой позиции нет, возвращает null.

TextHitInfo getNextLeftHit​(int offset, TextLayout.CaretPolicy policy)

Возвращает позицию для следующего курсора влево (вверх); если такой позиции нет, возвращает null.

TextHitInfo getNextLeftHit​(TextHitInfo hit)

Возвращает позицию для следующего курсора влево (вверх); если такой позиции нет, возвращает null.

TextHitInfo getNextRightHit​(int offset)

Возвращает позицию для следующего курсора вправо (вниз); если такой позиции нет, возвращает null.

TextHitInfo getNextRightHit​(int offset, TextLayout.CaretPolicy policy)

Возвращает позицию для следующего курсора вправо (вниз); если такой позиции нет, возвращает null.

TextHitInfo getNextRightHit​(TextHitInfo hit)

Возвращает позицию для следующего курсора вправо (вниз); если такой позиции нет, возвращает null.

Shape getOutline​(AffineTransform tx)

Возвращает Shape, представляющий контур этого TextLayout.

Rectangle getPixelBounds​(FontRenderContext frc, float x, float y)

Возвращает пиксельные границы этого TextLayout при отображении в графике с данным FontRenderContext в данном месте.

float getVisibleAdvance()

Возвращает отступ этого TextLayout, минус заключительные пробелы.

Shape getVisualHighlightShape​(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)

Возвращает Shape, охватывающий визуальное выделение в указанном диапазоне, расширенное до границ.

Shape getVisualHighlightShape​(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint, Rectangle2D bounds)

Возвращает траекторию, охватывающую визуальное выделение в указанном диапазоне, расширенную до bounds.

TextHitInfo getVisualOtherHit​(TextHitInfo hit)

Возвращает позицию на противоположной стороне курсора в указанной позиции.

protected void handleJustify​(float justificationWidth)

Выравнивает этот макет.

TextHitInfo hitTestChar​(float x, float y)

Возвращает TextHitInfo, соответствующий указанной точке.

TextHitInfo hitTestChar​(float x, float y, Rectangle2D bounds)

Возвращает TextHitInfo, соответствующий указанной точке.

void hitToPoint​(TextHitInfo hit, Point2D point)

Преобразует позицию в стандартные координаты.

boolean isLeftToRight()

Возвращает true если у этого TextLayout базовая ориентация слева направо или false если она справа налево.

boolean isVertical()

Возвращает true если этот TextLayout вертикальный.

String toString()

Возвращает отладочную информацию для этого TextLayout.

Методы, объявленные в классе java.lang.Object

equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Поля

DEFAULT_CARET_POLICY

public static final TextLayout.CaretPolicy DEFAULT_CARET_POLICY

Это CaretPolicy используется, когда клиент не указывает политику. С этой политикой попадание на символ, направление которого совпадает с направлением строки, сильнее, чем попадание на символ противоположного направления. Если направления символов совпадают, попадание на ведущий край символа сильнее, чем попадание на хвостовой край символа.

Конструкторы

TextLayout

public TextLayout(String string,
                  Font font,
                  FontRenderContext frc)

Создаёт TextLayout из String и Font. Весь текст стилизуется с помощью указанного Font.

String должен содержать единственный абзац текста, так как для двунаправленного алгоритма требуется целый абзац.

Параметры:
string - текст для отображения
font - Font для форматирования текста
frc - содержит информацию об устройствах графики, необходимую для корректного измерения текста. Измерения текста могут незначительно отличаться в зависимости от разрешения устройства и таких атрибутов, как сглаживание. Этот параметр не определяет преобразование между TextLayout и пространством пользователя.

TextLayout

public TextLayout(String string,
                  Map<? extends AttributedCharacterIterator.Attribute,​?> attributes,
                  FontRenderContext frc)

Создаёт TextLayout из String и набора атрибутов.

Весь текст стилизуется с использованием предоставленных атрибутов.

string должен содержать единственный абзац текста, так как для двунаправленного алгоритма требуется целый абзац.

Параметры:
string - текст для отображения
attributes - атрибуты для форматирования текста
frc - содержит информацию об устройствах графики, необходимую для корректного измерения текста. Измерения текста могут незначительно отличаться в зависимости от разрешения устройства и таких атрибутов, как сглаживание. Этот параметр не определяет преобразование между TextLayout и пространством пользователя.

TextLayout

public TextLayout(AttributedCharacterIterator text,
                  FontRenderContext frc)

Создаёт TextLayout из итератора по стилизованному тексту.

Итератор должен содержать единственный абзац текста, так как для двунаправленного алгоритма требуется целый абзац.

Параметры:
text - стилизованный текст для отображения
frc - содержит информацию об устройствах графики, необходимую для корректного измерения текста. Измерения текста могут незначительно отличаться в зависимости от разрешения устройства и таких атрибутов, как сглаживание. Этот параметр не определяет преобразование между TextLayout и пространством пользователя.

Методы

clone

protected Object clone()

Создаёт копию этого TextLayout.

Overrides:
clone в классе Object
Возвращает:
клонированный экземпляр.
См. также:
Cloneable

getJustifiedLayout

public TextLayout getJustifiedLayout(float justificationWidth)

Создаёт копию этого TextLayout с выравниванием по указанной ширине.

Если это TextLayout уже выровнено, выбрасывается исключение. Если коэффициент выравнивания этого объекта TextLayout равен нулю, возвращается TextLayout идентичный этому TextLayout.

Параметры:
justificationWidth - ширина, используемая для выравнивания строки. Для наилучших результатов она не должна сильно отличаться от текущего отступа строки.
Возвращает:
TextLayout с выравниванием по указанной ширине.
Исключение:
Error - если это макет уже выровнен, выбрасывается исключение Error.

handleJustify

protected void handleJustify(float justificationWidth)

Выравнивает этот макет. Переопределяется подклассами для управления выравниванием (если такие подклассы существуют...). Макет будет выровнен только если атрибуты абзаца (из исходного текста, возможно, по умолчанию от атрибутов макета) указывают коэффициент выравнивания, отличного от нуля. Текст будет выровнен по указанной ширине. Текущая реализация также корректирует подвешенную пунктуацию и пробелы в конце, чтобы они выходили за ширину выравнивания. После выравнивания макет не может быть выровнен повторно.

Некоторые фрагменты кода могут полагаться на неизменяемость макетов. Подклассы не должны вызывать этот метод напрямую, а вместо этого должны вызывать getJustifiedLayout, который вызовет этот метод для копии этого макета, сохраняя исходный.

Параметры:
justificationWidth - ширина, используемая для выравнивания строки. Для наилучших результатов она не должна сильно отличаться от текущего отступа строки.
См. также:
getJustifiedLayout(float)

getBaseline

public byte getBaseline()

Возвращает линию базовой строки для этого TextLayout. Линия базовой строки является одним из значений, определенных в Font, которые являются римским, центрированным и подвешенным. Подъём и спуск относительны к этой линии базовой строки. baselineOffsets также относительны к этой линии базовой строки.

Возвращает:
линию базовой строки этого TextLayout.
См. также:
getBaselineOffsets(), Font

getBaselineOffsets

public float[] getBaselineOffsets()

Возвращает массив смещений для линий базовых строк, используемых для этого TextLayout.

Индексы массива соответствуют одному из значений, определенных в Font, которые являются римским, центрированным и подвешенным. Значения относительны к линии базовой строки этого объекта TextLayout, так что getBaselineOffsets[getBaseline()] == 0. Смещения добавляются к позиции линии базовой строки объекта TextLayout для получения позиции новой линии базовой строки.

Возвращает:
массив смещений, содержащий линии базовых строк, используемые для этого TextLayout.
См. также:
getBaseline(), Font

getAdvance

public float getAdvance()

Возвращает отступ этого TextLayout. Отступ — это расстояние от начала до отступа самого правого (самого нижнего) символа. Это в координатах, относящихся к линии базовой строки.

Возвращает:
отступ этого TextLayout.

getVisibleAdvance

public float getVisibleAdvance()

Возвращает отступ этого TextLayout, минус пробелы в конце. Это в координатах, относящихся к линии базовой строки.

Возвращает:
отступ этого TextLayout без пробелов в конце.
См. также:
getAdvance()

getAscent

public float getAscent()

Возвращает подъём этого TextLayout. Подъём — это расстояние от верхней (правой) части TextLayout до линии базовой строки. Он всегда либо положительный, либо нулевой. Подъём достаточен для размещения надстрочного текста и является максимальным из суммы подъёма, смещения и линии базовой строки каждого глифа. Подъём — это максимальный подъём от линии базовой строки всего текста в TextLayout. Это в координатах, относящихся к линии базовой строки.

Возвращает:
подъём этого TextLayout.

getDescent

public float getDescent()

Возвращает спуск этого TextLayout. Спуск — это расстояние от линии базовой строки до нижней (левой) части TextLayout. Он всегда либо положительный, либо нулевой. Спуск достаточен для размещения подстрочного текста и является максимальным из суммы спуска, смещения и линии базовой строки каждого глифа. Это максимальный спуск от линии базовой строки всего текста в TextLayout. Это в координатах, относящихся к линии базовой строки.

Возвращает:
спуск этого TextLayout.

getLeading

public float getLeading()

Возвращает интерлинию TextLayout. Интерлиния — это рекомендуемое межстрочное расстояние для этого TextLayout. Это в координатах, относящихся к линии базовой строки.

Интерлиния вычисляется из интерлинии, спуска и линии базовой строки всех глифов в TextLayout. Алгоритм примерно такой:

maxD = 0;
maxDL = 0;
for (GlyphVector g in all glyphvectors) {
   maxD = max(maxD, g.getDescent() + offsets[g.getBaseline()]);
   maxDL = max(maxDL, g.getDescent() + g.getLeading() +
                      offsets[g.getBaseline()]);
}
return maxDL - maxD;
Возвращает:
интерлинию этого TextLayout.

getBounds

public Rectangle2D getBounds()

Возвращает границы этого TextLayout. Границы находятся в стандартных координатах.

Из-за эффектов растрирования эти границы могут не включать все пиксели, отрисованные TextLayout.

Они могут не совпадать точно с подъёмом, спуском, началом или отступом TextLayout.
Возвращает:
a Rectangle2D, являющийся границами этого TextLayout.

getPixelBounds

public Rectangle getPixelBounds(FontRenderContext frc,
                                float x,
                                float y)

Возвращает пиксельные границы этого TextLayout при отрисовке в графике с данным FontRenderContext в заданном месте. Контекст отрисовки графики не обязательно должен совпадать с FontRenderContext, использованным для создания этого TextLayout, и может быть null. Если он null, используется FontRenderContext этого TextLayout.

Параметры:
frc - FontRenderContext Graphics.
x - координата x для отрисовки этого TextLayout.
y - координата y для отрисовки этого TextLayout.
Возвращает:
Rectangle , ограничивающий пиксели, которые будут затронуты.
Since:
1.6
См. также:
GlyphVector.getPixelBounds(java.awt.font.FontRenderContext, float, float)

isLeftToRight

public boolean isLeftToRight()

Возвращает true , если у этого TextLayout есть направление слева направо, или false , если у него есть направление справа налево. У TextLayout есть основное направление слева направо (LTR) или справа налево (RTL). Основное направление независимо от фактического направления текста в строке, которое может быть LTR, RTL или смешанным. Макеты слева направо по умолчанию должны быть выровнены по левому краю. Если макет находится на строке с вкладками, вкладки идут слева направо, так что логически последовательные макеты будут размещаться слева направо. Для макетов справа налево всё наоборот. По умолчанию они должны быть выровнены по левому краю, а вкладки идут справа налево.

Возвращает:
true , если основное направление этого TextLayout слева направо; false в противном случае.

isVertical

public boolean isVertical()

Возвращает true , если этот TextLayout вертикальный.

Возвращает:
true , если этот TextLayout вертикальный; false в противном случае.

getCharacterCount

public int getCharacterCount()

Возвращает количество символов, представленных этим TextLayout.

Возвращает:
количество символов в этом TextLayout.

getCaretInfo

public float[] getCaretInfo(TextHitInfo hit,
                            Rectangle2D bounds)

Возвращает информацию о курсоре, соответствующем hit . Первый элемент массива — это пересечение курсора с линией базовой строки, как расстояние вдоль линии базовой строки. Второй элемент массива — обратный наклон (ход/подъём) курсора, измеренный относительно линии базовой строки в этой точке.

Этот метод предназначен для информационных целей. Для отображения курсоров лучше использовать getCaretShapes.

Параметры:
hit - попадание по символу в этом TextLayout
bounds - границы, для которых создаётся информация о курсоре. Границы находятся в координатах, относящихся к линии базовой строки.
Возвращает:
двухэлементный массив, содержащий положение и наклон курсора. Возвращаемая информация о курсоре находится в координатах, относящихся к линии базовой строки.
См. также:
getCaretShapes(int, Rectangle2D, TextLayout.CaretPolicy), Font.getItalicAngle()

getCaretInfo

public float[] getCaretInfo(TextHitInfo hit)

Возвращает информацию о курсоре, соответствующем hit . Этот метод является удобным перегруженным вариантом getCaretInfo и использует естественные границы этого TextLayout.

Параметры:
hit - попадание по символу в этом TextLayout
Возвращает:
информация о курсоре, соответствующем попаданию. Возвращаемая информация о курсоре находится в координатах, относящихся к линии базовой строки.

getNextRightHit

public TextHitInfo getNextRightHit(TextHitInfo hit)

Возвращает попадание для следующего курсора справа (снизу); если такого попадания нет, возвращает null . Если индекс символа попадания находится вне границ, выбрасывается IllegalArgumentException.

Параметры:
hit - попадание на символ в этом макете
Возвращает:
попадание, у которого курсор появляется в следующей позиции справа (снизу) от курсора указанного попадания или null.

getNextRightHit

public TextHitInfo getNextRightHit(int offset,
                                   TextLayout.CaretPolicy policy)

Возвращает попадание для следующего курсора справа (снизу); если такого попадания нет, возвращает null. Попадание находится справа от сильного курсора в указанном смещении, как определено указанной политикой. Возвращаемое попадание — это более сильное из двух возможных попаданий, как определено указанной политикой.

Параметры:
offset - смещение вставки в этот TextLayout. Не может быть меньше 0 или больше, чем количество символов этого объекта TextLayout.
policy - политика, используемая для выбора сильного курсора
Возвращает:
попадание, у которого курсор появляется в следующей позиции справа (снизу) от курсора указанного попадания или null.

getNextRightHit

public TextHitInfo getNextRightHit(int offset)

Возвращает попадание для следующего курсора справа (снизу); если такого попадания нет, возвращает null. Попадание находится справа от сильного курсора в указанном смещении, как определено политикой по умолчанию. Возвращаемое попадание — это более сильное из двух возможных попаданий, как определено политикой по умолчанию.

Параметры:
offset - смещение вставки в этот TextLayout. Не может быть меньше 0 или больше, чем количество символов объекта TextLayout.
Возвращает:
попадание, у которого курсор появляется в следующей позиции справа (снизу) от курсора указанного попадания, или null.

getNextLeftHit

public TextHitInfo getNextLeftHit(TextHitInfo hit)

Возвращает попадание для следующего курсора влево (вверх); если такого попадания нет, возвращает null. Если индекс символа попадания выходит за пределы, выбрасывается IllegalArgumentException.

Параметры:
hit - попадание на символ в этом TextLayout.
Возвращает:
попадание, у которого курсор появляется в следующей позиции слева (сверху) от курсора указанного попадания, или null.

getNextLeftHit

public TextHitInfo getNextLeftHit(int offset,
                                  TextLayout.CaretPolicy policy)

Возвращает попадание для следующего курсора влево (вверх); если такого попадания нет, возвращает null. Попадание находится слева от сильного курсора в указанном смещении, как определено указанной политикой. Возвращаемое попадание — это более сильное из двух возможных попаданий, как определено указанной политикой.

Параметры:
offset - смещение вставки в этот TextLayout. Не может быть меньше 0 или больше, чем количество символов этого объекта TextLayout.
policy - политика, используемая для выбора сильного курсора
Возвращает:
попадание, у которого курсор появляется в следующей позиции слева (сверху) от курсора указанного попадания, или null.

getNextLeftHit

public TextHitInfo getNextLeftHit(int offset)

Возвращает попадание для следующего курсора влево (вверх); если такого попадания нет, возвращает null. Попадание находится слева от сильного курсора в указанном смещении, как определено политикой по умолчанию. Возвращаемое попадание — это более сильное из двух возможных попаданий, как определено политикой по умолчанию.

Параметры:
offset - смещение вставки в этот TextLayout. Не может быть меньше 0 или больше, чем количество символов этого объекта TextLayout.
Возвращает:
попадание, у которого курсор появляется в следующей позиции слева (сверху) от курсора указанного попадания, или null.

getVisualOtherHit

public TextHitInfo getVisualOtherHit(TextHitInfo hit)

Возвращает попадание на противоположной стороне от курсора указанного попадания.

Параметры:
hit - указанное попадание
Возвращает:
попадание, находящееся на противоположной стороне от курсора указанного попадания.

getCaretShape

public Shape getCaretShape(TextHitInfo hit,
                           Rectangle2D bounds)

Возвращает Shape, представляющий курсор в указанном попадании внутри указанных границ.

Параметры:
hit - попадание, в котором необходимо сгенерировать курсор
bounds - границы TextLayout для использования при генерации курсора. Границы заданы относительно базовой линии.
Возвращает:
Shape , представляющий курсор. Возвращаемая форма находится в стандартных координатах.

getCaretShape

public Shape getCaretShape(TextHitInfo hit)

Возвращает Shape , представляющий курсор в указанном попадании внутри естественных границ этого TextLayout.

Параметры:
hit - попадание, в котором необходимо сгенерировать курсор
Возвращает:
Shape , представляющий курсор. Возвращаемая форма находится в стандартных координатах.

getCharacterLevel

public byte getCharacterLevel(int index)

Возвращает уровень символа в index. Индексы -1 и characterCount присваивают базовый уровень этого TextLayout.

Параметры:
index - индекс символа, уровень которого требуется получить
Возвращает:
уровень символа в указанном индексе.

getCaretShapes

public Shape[] getCaretShapes(int offset,
                              Rectangle2D bounds,
                              TextLayout.CaretPolicy policy)

Возвращает две траектории, соответствующие сильному и слабому курсорам.

Параметры:
offset - смещение в этом TextLayout
bounds - границы, до которых следует расширить курсоры. Границы заданы относительно базовой линии.
policy - указанная CaretPolicy
Возвращает:
массив из двух траекторий. Элемент с индексом 0 — сильный курсор. Если курсоров два, элемент с индексом 1 — слабый курсор, в противном случае null. Возвращаемые фигуры находятся в стандартных координатах.

getCaretShapes

public Shape[] getCaretShapes(int offset,
                              Rectangle2D bounds)

Возвращает две траектории, соответствующие сильному и слабому курсорам. Этот метод является удобным перегруженным методом getCaretShapes, который использует политику курсора по умолчанию.

Параметры:
offset - смещение в этом TextLayout
bounds - границы, до которых следует расширить курсоры. Границы заданы относительно базовой линии.
Возвращает:
две траектории, соответствующие сильному и слабому курсорам, как определено DEFAULT_CARET_POLICY. Они находятся в стандартных координатах.

getCaretShapes

public Shape[] getCaretShapes(int offset)

Возвращает две траектории, соответствующие сильному и слабому курсорам. Этот метод является удобным перегруженным методом getCaretShapes, который использует политику курсора по умолчанию и естественные границы этого объекта TextLayout.

Параметры:
offset - смещение в этом TextLayout
Возвращает:
две траектории, соответствующие сильному и слабому курсорам, как определено DEFAULT_CARET_POLICY. Они находятся в стандартных координатах.

getLogicalRangesForVisualSelection

public int[] getLogicalRangesForVisualSelection(TextHitInfo firstEndpoint,
                                                TextHitInfo secondEndpoint)

Возвращает логические диапазоны текста, соответствующие визуальному выделению.

Параметры:
firstEndpoint - конечная точка визуального диапазона
secondEndpoint - другая конечная точка визуального диапазона. Эта конечная точка может быть меньше firstEndpoint.
Возвращает:
массив целых чисел, представляющих пары начало/предел для выделенных диапазонов.
См. также:
getVisualHighlightShape(TextHitInfo, TextHitInfo, Rectangle2D)

getVisualHighlightShape

public Shape getVisualHighlightShape(TextHitInfo firstEndpoint,
                                     TextHitInfo secondEndpoint,
                                     Rectangle2D bounds)

Возвращает траекторию, охватывающую визуальное выделение в указанном диапазоне, расширенную до bounds.

Если выделение включает крайнюю левую (верхнюю) позицию, выделение расширяется влево (вверх) от bounds. Если выделение включает крайнюю правую (нижнюю) позицию, выделение расширяется вправо (вниз) от границ. Высота (ширина на вертикальных линиях) выделения всегда расширяется до bounds.

Хотя выделение всегда непрерывное, логически выделенный текст может быть несмежным на строках с текстом смешанной ориентации. Логические диапазоны выделенного текста можно получить с помощью getLogicalRangesForVisualSelection. Например, рассмотрим текст 'ABCdef', где заглавные буквы обозначают текст справа налево, отображенный на строке справа налево, с визуальным выделением от 0L (ведущий край 'A') до 3T (задний край 'd'). Текст отображается следующим образом, с выделенными жирно подчеркнутыми областями:

defCBA
Логические диапазоны выделения составляют 0-3, 4-6 (ABC, ef), потому что визуально непрерывный текст логически несмежный. Также обратите внимание, что поскольку выбрана правая позиция в макете (справа от 'A'), выделение расширяется вправо от границ.
Параметры:
firstEndpoint - один конец визуального выделения
secondEndpoint - другой конец визуального выделения
bounds - прямоугольник границ, до которых следует расширить выделение. Границы заданы относительно базовой линии.
Возвращает:
траекторию Shape, охватывающую выделение. Она находится в стандартных координатах.
См. также:
getLogicalRangesForVisualSelection(TextHitInfo, TextHitInfo), getLogicalHighlightShape(int, int, Rectangle2D)

getVisualHighlightShape

public Shape getVisualHighlightShape(TextHitInfo firstEndpoint,
                                     TextHitInfo secondEndpoint)

Возвращает Shape , охватывающую визуальное выделение в заданном диапазоне, расширенное до границ. Этот метод является удобным перегруженным методом getVisualHighlightShape, который использует естественные границы этого объекта TextLayout.

Параметры:
firstEndpoint - один конец визуального выделения
secondEndpoint - другой конец визуального выделения
Возвращает:
Shape , охватывающую выделение. Она находится в стандартных координатах.

getLogicalHighlightShape

public Shape getLogicalHighlightShape(int firstEndpoint,
                                      int secondEndpoint,
                                      Rectangle2D bounds)

Возвращает область, охватывающую логический выбор в указанном диапазоне, расширенную до указанной bounds.

Если диапазон выбора включает первый логический символ, выбор расширяется до части bounds перед началом этого TextLayout. Если диапазон включает последний логический символ, выбор расширяется до части bounds после окончания этого TextLayout. Высота (ширина на вертикальных строках) выбора всегда расширяется до bounds.

Выбор может быть несплошным на строках с текстом смешанной ориентации. Выбранными будут только те символы в логическом диапазоне между началом и концом. Например, рассмотрим текст 'ABCdef', где заглавные буквы указывают текст справа налево, отображаемый на строке справа налево, с логическим выбором от 0 до 4 ('ABCd'). Текст отображается следующим образом, при этом выбор выделен жирным шрифтом, а расширение — подчеркиванием:

defCBA
Выбор несплошной, потому что выбранные символы визуально несплошны. Также обратите внимание, что поскольку диапазон включает первый логический символ (A), выбор расширяется до части bounds перед началом макета, который в этом случае (строка справа налево) является правой частью bounds.
Parameters:
firstEndpoint - конечная точка в диапазоне символов для выбора
secondEndpoint - другая конечная точка диапазона символов для выбора. Может быть меньше firstEndpoint. Диапазон включает символ в min(firstEndpoint, secondEndpoint), но не включает max(firstEndpoint, secondEndpoint).
bounds - прямоугольник, до границ которого расширить выбор. Это координаты, относительные к базовой линии.
Returns:
область, охватывающая выбор. Это стандартные координаты.
See Also:
getVisualHighlightShape(TextHitInfo, TextHitInfo, Rectangle2D)

getLogicalHighlightShape

public Shape getLogicalHighlightShape(int firstEndpoint,
                                      int secondEndpoint)

Возвращает область, охватывающую логический выбор в указанном диапазоне, расширенную до естественных границ этого TextLayout. Этот метод является удобной перегрузкой getLogicalHighlightShape , использующей естественные границы этого TextLayout.

Parameters:
firstEndpoint - конечная точка в диапазоне символов для выбора
secondEndpoint - другая конечная точка диапазона символов для выбора. Может быть меньше firstEndpoint. Диапазон включает символ в min(firstEndpoint, secondEndpoint), но не включает max(firstEndpoint, secondEndpoint).
Returns:
область, охватывающая выбор. Это стандартные координаты.

getBlackBoxBounds

public Shape getBlackBoxBounds(int firstEndpoint,
                               int secondEndpoint)

Возвращает границы чёрного ящика для символов в указанном диапазоне. Границы чёрного ящика — это область, являющаяся объединением границ всех глифов, соответствующих символам между началом и концом. Эта область может быть разрозненной.

Parameters:
firstEndpoint - одна граница диапазона символов
secondEndpoint - другая граница диапазона символов. Может быть меньше firstEndpoint.
Returns:
область, охватывающая границы чёрного ящика. Это стандартные координаты.

hitTestChar

public TextHitInfo hitTestChar(float x,
                               float y,
                               Rectangle2D bounds)

Возвращает информацию о символе, соответствующую указанной точке. Координаты за пределами границ TextLayout отображаются как попадания на ведущем крае первого логического символа или на концевом крае последнего логического символа, соответственно, независимо от положения этого символа в строке. Используется только направление вдоль базовой линии для этого анализа.

Parameters:
x - смещение по оси X от начала координат этого TextLayout. Это стандартные координаты.
y - смещение по оси Y от начала координат этого TextLayout. Это стандартные координаты.
bounds - границы TextLayout. Это координаты, относительные к базовой линии.
Returns:
информацию о попадании, описывающую символ и край (ведущий или концевой) под указанной точкой.

hitTestChar

public TextHitInfo hitTestChar(float x,
                               float y)

Возвращает информацию о символе, соответствующую указанной точке. Этот метод является удобной перегрузкой hitTestChar , использующей естественные границы этого TextLayout.

Parameters:
x - смещение по оси X от начала координат этого TextLayout. Это стандартные координаты.
y - смещение по оси Y от начала координат этого TextLayout. Это стандартные координаты.
Returns:
информацию о попадании, описывающую символ и край (ведущий или концевой) под указанной точкой.

equals

public boolean equals(TextLayout rhs)

Возвращает true, если два макета равны. Соблюдает общий контракт equals(Object).

Parameters:
rhs - TextLayout для сравнения с этим TextLayout
Returns:
true, если указанный TextLayout равен этому TextLayout.

toString

public String toString()

Возвращает отладочную информацию для этого TextLayout.

Overrides:
toString в классе Object
Returns:
строковое представление этого TextLayout.

draw

public void draw(Graphics2D g2,
                 float x,
                 float y)

Отображает этот TextLayout в указанном месте в контексте Graphics2D. Начало макета размещается в точке x, y. Отрисовка может коснуться любой точки в пределах getBounds() от этого положения. При этом g2 не изменяется. Текст отображается вдоль базовой линии.

Parameters:
g2 - контекст Graphics2D для отображения макета
x - координата X начала этого TextLayout
y - координата Y начала этого TextLayout
See Also:
getBounds()

getOutline

public Shape getOutline(AffineTransform tx)

Возвращает Shape , представляющий контур этого TextLayout.

Parameters:
tx - необязательное преобразование AffineTransform для применения к контуру этого TextLayout.
Returns:
Shape , являющийся контуром этого TextLayout. Это стандартные координаты.

getLayoutPath

public LayoutPath getLayoutPath()

Возвращает LayoutPath или null, если путь макета — это путь по умолчанию (x отображается как отступ, y — как смещение).

Returns:
путь макета
Since:
1.6

hitToPoint

public void hitToPoint(TextHitInfo hit,
                       Point2D point)

Преобразует информацию о попадании в точку в стандартных координатах. Точка находится на базовой линии символа в начале или конце символа, соответственно. Если путь разрывается на стороне символа, представленного попаданием, точка будет смежной с символом.

Parameters:
hit - информация о попадании. Она должна быть допустимой для TextLayout.
point - возвращаемая точка. Точка находится в стандартных координатах.
Throws:
IllegalArgumentException - если информация о попадании не допустима для TextLayout.
NullPointerException - если информация о попадании или точка равны null.
Since:
1.6

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/font/TextLayout.html

Spec-Zone .ru
спецификации, руководства, описания, API