Spec-Zone.ru › OpenJDK 17

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

Краткое описание вложенных классов

Modifier and Type Class Description
static class  TextLayout.CaretPolicy
Определяет политику определения сильного положения курсора.

Краткое описание полей

Modifier and Type Field Description
static final TextLayout.CaretPolicy DEFAULT_CARET_POLICY
Этот CaretPolicy используется, когда политика не указана клиентом.

Краткое описание конструкторов

Конструктор Description
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 из итератора по форматированному тексту.

Краткое описание методов

Modifier and Type Метод Description
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.
Returns:
Rectangle2D, который является границами этого TextLayout.

getPixelBounds

public Rectangle getPixelBounds(FontRenderContext frc, float x, float y)
Возвращает прямоугольник пикселей для этой TextLayout при отрисовке в графическом контексте с заданным FontRenderContext в заданном месте. Контекст рендеринга графики не обязательно должен совпадать с FontRenderContext использованным для создания этой TextLayout, и может быть null. Если он null, используется FontRenderContext этой TextLayout.
Parameters:
frc - контекст рендеринга графики Graphics.
x - координата x для отрисовки этой TextLayout.
y - координата y для отрисовки этой TextLayout.
Returns:
прямоугольник, охватывающий пиксели, которые будут затронуты.
Since:
1.6
See Also:
  • GlyphVector.getPixelBounds(java.awt.font.FontRenderContext, float, float)

isLeftToRight

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

isVertical

public boolean isVertical()
Возвращает true если эта TextLayout вертикальная.
Returns:
true если эта TextLayout вертикальная; false в противном случае.

getCharacterCount

public int getCharacterCount()
Возвращает количество символов, представленных этой TextLayout.
Returns:
количество символов в этой TextLayout.

getCaretInfo

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

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

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

getCaretInfo

public float[] getCaretInfo(TextHitInfo hit)
Возвращает информацию о курсоре, соответствующем hit. Этот метод — удобная перегрузка getCaretInfo и использует естественные границы этой TextLayout.
Parameters:
hit - попадание по символу в этом TextLayout
Returns:
информация о курсоре, соответствующем попаданию. Возвращаемая информация о курсоре задана в координатах, относительных к базовой линии.

getNextRightHit

public TextHitInfo getNextRightHit(TextHitInfo hit)
Возвращает попадание для следующего курсора справа (снизу); если такого попадания нет, возвращает null. Если индекс символа попадания выходит за пределы, выбрасывается IllegalArgumentException.
Parameters:
hit - попадание по символу в этом макете
Returns:
попадание, чей курсор находится в следующей позиции справа (снизу) от курсора предоставленного попадания или null.

getNextRightHit

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

getNextRightHit

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

getNextLeftHit

public TextHitInfo getNextLeftHit(TextHitInfo hit)
Возвращает попадание для следующего курсора слева (сверху); если такого попадания нет, возвращает null. Если индекс символа попадания выходит за пределы, выбрасывается IllegalArgumentException.
Parameters:
hit - попадание по символу в этом TextLayout.
Returns:
попадание, чей курсор находится в следующей позиции слева (сверху) от курсора предоставленного попадания, или null.

getNextLeftHit

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

getNextLeftHit

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

getVisualOtherHit

public TextHitInfo getVisualOtherHit(TextHitInfo hit)
Возвращает попадание на противоположной стороне курсора указанного попадания.
Parameters:
hit - указанное попадание
Returns:
попадание, находящееся на противоположной стороне курсора указанного попадания.

getCaretShape

public Shape getCaretShape(TextHitInfo hit, Rectangle2D bounds)
Возвращает Shape, представляющий курсор в указанном попадании внутри указанных границ.
Parameters:
hit - попадание, в котором нужно сгенерировать курсор
bounds - границы TextLayout для использования при генерации курсора. Границы заданы в координатах, относительных к базовой линии.
Returns:
Shape представляющий курсор. Возвращаемая форма задана в стандартных координатах.

getCaretShape

public Shape getCaretShape(TextHitInfo hit)
Возвращает Shape представляющий курсор в указанном попадании внутри естественных границ этой TextLayout.
Parameters:
hit - попадание, в котором нужно сгенерировать курсор
Returns:
Shape представляющий курсор. Возвращаемая форма задана в стандартных координатах.

getCharacterLevel

public byte getCharacterLevel(int index)
Возвращает уровень символа в позиции index. Индексы -1 и characterCount присваивают базовый уровень данного TextLayout.
Parameters:
index - индекс символа, для которого необходимо получить уровень
Returns:
уровень символа в указанном индексе.

getCaretShapes

public Shape[] getCaretShapes(int offset, Rectangle2D bounds, TextLayout.CaretPolicy policy)
Возвращает две траектории, соответствующие сильному и слабому курсору.
Parameters:
offset - смещение в этом TextLayout
bounds - границы, до которых следует расширить курсоры. Границы заданы в координатах, относительных к базовой линии.
policy - заданная CaretPolicy
Returns:
массив из двух траекторий. Элемент с индексом 0 — сильный курсор. Если есть два курсора, элемент с индексом 1 — слабый курсор, иначе — null. Возвращаемые фигуры заданы в стандартных координатах.

getCaretShapes

public Shape[] getCaretShapes(int offset, Rectangle2D bounds)
Возвращает две траектории, соответствующие сильному и слабому курсору. Этот метод — удобная перегрузка getCaretShapes, которая использует политику курсора по умолчанию.
Parameters:
offset - смещение в этом TextLayout
bounds - границы, до которых следует расширить курсоры. Границы заданы в координатах, относительных к базовой линии.
Returns:
две траектории, соответствующие сильному и слабому курсору, как определено DEFAULT_CARET_POLICY. Эти траектории заданы в стандартных координатах.

getCaretShapes

public Shape[] getCaretShapes(int offset)
Возвращает две траектории, соответствующие сильному и слабому курсору. Этот метод — удобная перегрузка getCaretShapes, которая использует политику курсора по умолчанию и естественные границы этого объекта TextLayout.
Parameters:
offset - смещение в этом TextLayout
Returns:
две траектории, соответствующие сильному и слабому курсору, как определено DEFAULT_CARET_POLICY. Эти траектории заданы в стандартных координатах.

getLogicalRangesForVisualSelection

public int[] getLogicalRangesForVisualSelection(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)
Возвращает логические диапазоны текста, соответствующие визуальному выделению.
Parameters:
firstEndpoint - конечная точка визуального диапазона
secondEndpoint - другая конечная точка визуального диапазона. Эта конечная точка может быть меньше firstEndpoint.
Returns:
массив целых чисел, представляющих пары начало/предел для выбранных диапазонов.
See Also:
  • 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'), выделение расширяется вправо от границ.
Parameters:
firstEndpoint - одна из границ визуального выделения
secondEndpoint - другая граница визуального выделения
bounds - прямоугольник границ, до которых следует расширить выделение. Границы заданы в координатах, относительных к базовой линии.
Returns:
фигуру, охватывающую выделение. Фигура задана в стандартных координатах.
See Also:
  • getLogicalRangesForVisualSelection(TextHitInfo, TextHitInfo)
  • getLogicalHighlightShape(int, int, Rectangle2D)

getVisualHighlightShape

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

getLogicalHighlightShape

public Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint, Rectangle2D bounds)
Возвращает фигуру, охватывающую логическое выделение в заданном диапазоне, расширенное до указанных bounds.

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

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

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

getLogicalHighlightShape

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

getBlackBoxBounds

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

hitTestChar

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

hitTestChar

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

equals

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

toString

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

draw

public void draw(Graphics2D g2, float x, float y)
Отображает этот TextLayout в указанном расположении в контексте Graphics2D. Начало координат макета расположено в x, y. Отрисовка может затронуть любую точку в пределах getBounds() от этого положения. Это не изменяет g2. Текст отображается вдоль базовой линии.
Parameters:
g2 - контекст Graphics2D для отображения макета
x - координата X начала координат этого TextLayout
y - координата Y начала координат этого TextLayout
See Also:
  • getBounds()

getOutline

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

getLayoutPath

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

hitToPoint

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

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

Spec-Zone.ru

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