Spec-Zone.ru › OpenJDK 24

Класс 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.

Методы, объявленные в классе 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 должен содержать единственный абзац текста, так как для двунаправленного алгоритма требуется весь абзац.

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

TextLayout

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

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

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

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

TextLayout

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

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

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

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

clone

protected Object clone()
Создаёт копию этого TextLayout.
Overrides:
clone в классе Object
Returns:
клонированный экземпляр.
See Also:
  • Cloneable

getJustifiedLayout

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

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

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

handleJustify

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

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

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

getBaseline

public byte getBaseline()
Возвращает базовую линию для этого TextLayout. Базовая линия — одно из значений, определённых в Font, такие как римская, центрированная и висячая. Подъём и спуск относительны к этой базовой линии. baselineOffsets также относительны к этой базовой линии.
Returns:
базовая линия этого TextLayout.
See Also:
  • getBaselineOffsets()
  • Font

getBaselineOffsets

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

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

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

getAdvance

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

getVisibleAdvance

public float getVisibleAdvance()
Возвращает отступ этого TextLayout, минус хвостовые пробелы. Это координаты, относительные к базовой линии.
Returns:
отступ этого TextLayout без хвостовых пробелов.
See Also:
  • getAdvance()

getAscent

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

getDescent

public float getDescent()
Возвращает спуск этого TextLayout. Спуск — это расстояние от базовой линии до нижней (левой) части TextLayout. Он всегда либо положителен, либо равен нулю. Спуск достаточен для размещения подстрочного текста и является максимальным значением суммы спуска, смещения и базовой линии каждого глифа. Это максимальный спуск от базовой линии всего текста в TextLayout. Он задаётся в координатах, относительных к базовой линии.
Returns:
спуск этого 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;
 
Returns:
интерлиньяж этого 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(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 - прямоугольник границ, до которых следует расширить выделение. Координаты заданы относительно базовой линии.
Возвращает:
фигуру, охватывающую выделение. Координаты заданы в стандартном формате.
См. также:
  • getLogicalRangesForVisualSelection(TextHitInfo, TextHitInfo)
  • getLogicalHighlightShape(int, int, Rectangle2D)

getVisualHighlightShape

public Shape getVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)
Возвращает Shape, охватывающую визуальное выделение в заданном диапазоне, расширенное до границ. Этот метод — удобная перегрузка getVisualHighlightShape, использующая естественные границы этого TextLayout.
Параметры:
firstEndpoint - один конец визуального выделения
secondEndpoint - другой конец визуального выделения
Возвращает:
фигуру, охватывающую выделение. Координаты заданы в стандартном формате.

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).
Возвращает:
объект, охватывающий выделение. Координаты заданы в стандартном формате.

getBlackBoxBounds

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

hitTestChar

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

hitTestChar

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

equals

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

toString

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

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 - если попадание или точка равны null.
С тех пор как:
1.6

© 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://download.java.net/java/early_access/jdk24/docs/api/java.desktop/java/awt/font/TextLayout.html

Spec-Zone.ru

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