Spec-Zone.ru › OpenJDK 25

Класс TextLayout

java.lang.Object
java.awt.font.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 final 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.

Методы, объявленные в классе 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.
Переопределяет:
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: roman, centered и hanging. Восходящие и нисходящие элементы отсчитываются относительно этой базовой линии. baselineOffsets также отсчитываются относительно этой базовой линии.
Возвращает:
базовую линию этой TextLayout.
См. также:
  • getBaselineOffsets()
  • Font

getBaselineOffsets

public float[] getBaselineOffsets()
Возвращает массив смещений для базовых линий, используемых в этой TextLayout.

Индексом массива служит одно из значений, определенных в Font: roman, centered и hanging. Значения отсчитываются относительно базовой линии этого объекта 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.
Возвращает:
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, ограничивающий затрагиваемые пиксели.
С:
1.6
См. также:
  • GlyphVector.getPixelBounds(FontRenderContext, float, float)

isLeftToRight

public boolean isLeftToRight()
Возвращает true, если базовое направление этой TextLayout — слева направо, или false, если оно — справа налево. TextLayout имеет базовое направление слева направо (LTR) или справа налево (RTL). Базовое направление не зависит от фактического направления текста в строке, которое может быть LTR, RTL или смешанным. По умолчанию компоновки слева направо должны выравниваться по левому краю. Если компоновка находится в строке с табуляцией, позиции табуляции следуют слева направо, поэтому логически последовательные компоновки располагаются слева направо. Для компоновок 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
Возвращает:
массив из двух контуров. Элемент с индексом ноль — сильный курсор. Если курсоров два, элемент с индексом один — слабый курсор; в противном случае он равен 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)
Возвращает Shape, охватывающую логическое выделение в указанном диапазоне и расширенную до заданного bounds.

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

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

   defCBA  
Выделение является несмежным, поскольку выделенные символы визуально не смежны. Обратите также внимание: поскольку диапазон включает первый логический символ (A), выделение расширяется до части bounds перед началом разметки, которая в данном случае (строка с письмом справа налево) является правой частью bounds.
Параметры:
firstEndpoint — конечная точка диапазона символов для выделения
secondEndpoint — другая конечная точка диапазона символов для выделения. Может быть меньше, чем firstEndpoint. Диапазон включает символ с индексом min(firstEndpoint, secondEndpoint), но не включает символ с индексом max(firstEndpoint, secondEndpoint).
bounds — ограничивающий прямоугольник, до которого следует расширить выделение. Координаты заданы относительно базовой линии.
Возвращает:
область, охватывающую выделение. Координаты заданы в стандартной системе координат.
См. также:
  • getVisualHighlightShape(TextHitInfo, TextHitInfo, Rectangle2D)

getLogicalHighlightShape

public Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint)
Возвращает Shape, охватывающую логическое выделение в указанном диапазоне и расширенную до естественных границ этого TextLayout. Этот метод является перегруженным вариантом getLogicalHighlightShape, использующим естественные границы этого TextLayout.
Параметры:
firstEndpoint — конечная точка диапазона символов для выделения
secondEndpoint — другая конечная точка диапазона символов для выделения. Может быть меньше, чем firstEndpoint. Диапазон включает символ с индексом min(firstEndpoint, secondEndpoint), но не включает символ с индексом max(firstEndpoint, secondEndpoint).
Возвращает:
Shape, охватывающую выделение. Координаты заданы в стандартной системе координат.

getBlackBoxBounds

public Shape getBlackBoxBounds(int firstEndpoint, int secondEndpoint)
Возвращает границы черного прямоугольника символов в указанном диапазоне. Границы черного прямоугольника — это область, состоящая из объединения ограничивающих прямоугольников всех глифов, соответствующих символам от начала до конца диапазона. Эта область может быть несвязной.
Параметры:
firstEndpoint — один конец диапазона символов
secondEndpoint — другой конец диапазона символов. Может быть меньше, чем firstEndpoint.
Возвращает:
Shape, охватывающую границы черного прямоугольника. Координаты заданы в стандартной системе координат.

hitTestChar

public TextHitInfo hitTestChar(float x, float y, Rectangle2D bounds)
Возвращает TextHitInfo, соответствующее указанной точке. Координаты за пределами границ TextLayout соответствуют попаданиям на начальный край первого логического символа или конечный край последнего логического символа, в зависимости от ситуации, независимо от положения этого символа в строке. Для этой проверки используется только направление вдоль базовой линии.
Параметры:
x — смещение по X относительно начала этого TextLayout. Координаты заданы в стандартной системе координат.
y — смещение по Y относительно начала этого TextLayout. Координаты заданы в стандартной системе координат.
bounds — границы TextLayout. Координаты заданы относительно базовой линии.
Возвращает:
результат проверки попадания, описывающий символ и край (начальный или конечный) под указанной точкой.

hitTestChar

public TextHitInfo hitTestChar(float x, float y)
Возвращает TextHitInfo, соответствующее указанной точке. Этот метод является перегруженным вариантом hitTestChar, использующим естественные границы этого TextLayout.
Параметры:
x — смещение по X относительно начала этого TextLayout. Координаты заданы в стандартной системе координат.
y — смещение по Y относительно начала этого TextLayout. Координаты заданы в стандартной системе координат.
Возвращает:
результат проверки попадания, описывающий символ и край (начальный или конечный) под указанной точкой.

equals

public boolean equals(TextLayout rhs)
Возвращает true, если две разметки равны. Соответствует общему контракту equals(Object).
Параметры:
rhs — TextLayout, с которым сравнивается этот TextLayout
Возвращает:
true, если указанный TextLayout равен этому TextLayout.

toString

public String toString()
Возвращает отладочную информацию для этого TextLayout.
Переопределяет:
toString в классе Object
Возвращает:
textLine этого TextLayout в виде String.

draw

public void draw(Graphics2D g2, float x, float y)
Отображает этот TextLayout в указанном месте в указанном контексте Graphics2D. Начало разметки помещается в точку x, y. При отображении может быть затронута любая точка в пределах getBounds() от этой позиции. Объект g2 остается неизменным. Текст отображается вдоль пути базовой линии.
Параметры:
g2 — контекст Graphics2D, в котором отображается разметка
x — координата X начала этого TextLayout
y — координата Y начала этого TextLayout
См. также:
  • getBounds()

getOutline

public Shape getOutline(AffineTransform tx)
Возвращает Shape, представляющую контур этого TextLayout.
Параметры:
tx — необязательный объект AffineTransform, применяемый к контуру этого TextLayout.
Возвращает:
Shape, представляющую контур этого TextLayout. Координаты заданы в стандартной системе координат.

getLayoutPath

public LayoutPath getLayoutPath()
Возвращает LayoutPath или null, если путь разметки является путем по умолчанию (x соответствует продвижению, y — смещению).
Возвращает:
путь разметки
Начиная с:
1.6

hitToPoint

public void hitToPoint(TextHitInfo hit, Point2D point)
Преобразует результат проверки попадания в точку в стандартной системе координат. Точка находится на базовой линии символа у его начального или конечного края, в зависимости от ситуации. Если путь прерывается у края символа, соответствующего результату проверки попадания, точка будет расположена рядом с символом.
Параметры:
hit — результат проверки попадания. Он должен быть допустимым результатом для TextLayout.
point — возвращаемая точка. Координаты точки заданы в стандартной системе координат.
Вызывает исключение:
IllegalArgumentException — если результат проверки попадания недопустим для TextLayout.
NullPointerException — если hit или point равен null.
Начиная с:
1.6

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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/25/docs/api/java.desktop/java/awt/font/TextLayout.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API