Spec-Zone.ru › OpenJDK 27

Класс 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
Модификатор и тип Метод Описание
boolean equals(Object obj)
Указывает, равен ли этот объект другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация устарела и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

Подробное описание полей

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 и пользовательским пространством.
Исключения:
IllegalArgumentException — если какой-либо из параметров равен null.

TextLayout

public TextLayout(String string, Map<? extends AttributedCharacterIterator.Attribute, ?> attributes, FontRenderContext frc)
Создает TextLayout из String и набора атрибутов.

Для форматирования всего текста используются предоставленные атрибуты.

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

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

TextLayout

public TextLayout(AttributedCharacterIterator text, FontRenderContext frc)
Создает TextLayout из итератора по форматированному тексту.

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

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

Подробное описание методов

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: обычная, центральная или висячая. Верхний и нижний выносные элементы отсчитываются относительно этой базовой линии. 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.
Возвращает:
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). Базовое направление не зависит от фактического направления текста в строке, которое может быть слева направо, справа налево или смешанным. По умолчанию макеты с направлением слева направо должны выравниваться по левому краю. Если макет находится в строке с табуляцией, табуляторы перемещаются слева направо, поэтому логически следующие друг за другом макеты располагаются слева направо. Для макетов с направлением справа налево действует обратное правило. По умолчанию они должны выравниваться по левому краю, а табуляторы перемещаются справа налево.
Возвращает:
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)
Возвращает 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, 2026, 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.

Spec-Zone.ru

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