Spec-Zone.ru › OpenJDK 21

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

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

TextLayout

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

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

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

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

TextLayout

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

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

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

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

clone

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

getJustifiedLayout

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

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

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

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, используются пиксельные границы этого TextLayout.
Parameters:
frc - контекст рендеринга графики Graphics.
x - координата x, в которой нужно отобразить это TextLayout.
y - координата y, в которой нужно отобразить это TextLayout.
Returns:
объект Rectangle, ограничивающий пиксели, которые будут затронуты.
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:
массив из двух траекторий. Элемент с индексом ноль — это сильная метка ввода. Если есть две метки ввода, элемент с индексом один — это слабая метка ввода, иначе это 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:
а Shape , охватывающий выделение. Это в стандартных координатах.
See Also:
  • getLogicalRangesForVisualSelection(TextHitInfo, TextHitInfo)
  • getLogicalHighlightShape(int, int, Rectangle2D)

getVisualHighlightShape

public Shape getVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)
Возвращает Shape , охватывающую визуальное выделение в указанном диапазоне, расширенное до границ. Этот метод является удобной перегрузкой getVisualHighlightShape и использует естественные границы этого объекта TextLayout.
Parameters:
firstEndpoint - один конец визуального выделения
secondEndpoint - другой конец визуального выделения
Returns:
а 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.
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)
Возвращает Shape , охватывающую логическое выделение в заданном диапазоне, расширенное до естественных границ этого объекта TextLayout. Этот метод является удобной перегрузкой getLogicalHighlightShape и использует естественные границы этого объекта TextLayout.
Parameters:
firstEndpoint - конечная точка в диапазоне символов для выделения
secondEndpoint - другая конечная точка диапазона символов для выделения. Может быть меньше firstEndpoint. Диапазон включает символ в min(firstEndpoint, secondEndpoint), но исключает max(firstEndpoint, secondEndpoint).
Returns:
а Shape , охватывающий выделение. Это в стандартных координатах.

getBlackBoxBounds

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

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:
a 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, 2023, 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/21/docs/api/java.desktop/java/awt/font/TextLayout.html

Spec-Zone.ru

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