Класс 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, связанные с отображением, — в стандартных координатах.
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static class |
TextLayout.CaretPolicy |
Определяет политику определения сильного положения курсора. |
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final TextLayout.CaretPolicy |
DEFAULT_CARET_POLICY |
Это CaretPolicy используется, когда клиент не указывает политику. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
TextLayout |
|
TextLayout |
Создаёт TextLayout из String и набора атрибутов. |
TextLayout |
Создаёт TextLayout из итератора по форматированному тексту. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт копию этого TextLayout. |
void |
draw |
Отображает этот TextLayout в заданном месте контекста Graphics2D. |
boolean |
equals |
Возвращает true, если два макета равны. |
float |
getAdvance() |
Возвращает смещение этого TextLayout. |
float |
getAscent() |
Возвращает восходящее значение этого TextLayout. |
byte |
getBaseline() |
Возвращает базовую линию для этого TextLayout. |
float[] |
getBaselineOffsets() |
Возвращает массив смещений для базовых линий, используемых для этого TextLayout. |
Shape |
getBlackBoxBounds |
Возвращает границы чёрного ящика символов в заданном диапазоне. |
Rectangle2D |
getBounds() |
Возвращает границы этого TextLayout. |
float[] |
getCaretInfo |
Возвращает информацию о курсоре, соответствующем hit. |
float[] |
getCaretInfo |
Возвращает информацию о курсоре, соответствующем hit. |
Shape |
getCaretShape |
Возвращает Shape, представляющий курсор в указанной точке внутри естественных границ этого TextLayout. |
Shape |
getCaretShape |
Возвращает Shape, представляющий курсор в указанной точке внутри заданных границ. |
Shape[] |
getCaretShapes |
Возвращает две траектории, соответствующие сильному и слабому курсорам. |
Shape[] |
getCaretShapes |
Возвращает две траектории, соответствующие сильному и слабому курсорам. |
Shape[] |
getCaretShapes |
Возвращает две траектории, соответствующие сильному и слабому курсорам. |
int |
getCharacterCount() |
Возвращает количество символов, представленных этим TextLayout. |
byte |
getCharacterLevel |
Возвращает уровень символа в позиции index. |
float |
getDescent() |
Возвращает нисходящее значение этого TextLayout. |
TextLayout |
getJustifiedLayout |
Создаёт копию этого TextLayout, выровненную по указанной ширине. |
LayoutPath |
getLayoutPath() |
Возвращает LayoutPath или null, если траектория макета является стандартной траекторией (x отображается на смещение, y отображается на смещение). |
float |
getLeading() |
Возвращает отступ TextLayout. |
Shape |
getLogicalHighlightShape |
Возвращает Shape, охватывающее логическую выделенную область в указанном диапазоне, расширенную до естественных границ этого TextLayout. |
Shape |
getLogicalHighlightShape |
Возвращает Shape, охватывающее логическую выделенную область в указанном диапазоне, расширенную до указанных bounds. |
int[] |
getLogicalRangesForVisualSelection |
Возвращает логические диапазоны текста, соответствующие визуальному выбору. |
TextHitInfo |
getNextLeftHit |
Возвращает точку попадания на следующий курсор влево (вверх); если такой точки нет, возвращает null. |
TextHitInfo |
getNextLeftHit |
Возвращает точку попадания на следующий курсор влево (вверх); если такой точки нет, возвращает null. |
TextHitInfo |
getNextLeftHit |
Возвращает точку попадания на следующий курсор влево (вверх); если такой точки нет, возвращает null. |
TextHitInfo |
getNextRightHit |
Возвращает точку попадания на следующий курсор вправо (вниз); если такой точки нет, возвращает null. |
TextHitInfo |
getNextRightHit |
Возвращает точку попадания на следующий курсор вправо (вниз); если такой точки нет, возвращает null. |
TextHitInfo |
getNextRightHit |
Возвращает точку попадания на следующий курсор вправо (вниз); если такой точки нет, возвращает null. |
Shape |
getOutline |
Возвращает Shape, представляющий контур этого TextLayout. |
Rectangle |
getPixelBounds |
Возвращает пиксельные границы этого TextLayout при отображении в графике с заданным FontRenderContext в заданном месте. |
float |
getVisibleAdvance() |
Возвращает смещение этого TextLayout за вычетом конечного пробела. |
Shape |
getVisualHighlightShape |
Возвращает Shape, охватывающее визуальное выделение в указанном диапазоне, расширенное до границ. |
Shape |
getVisualHighlightShape |
Возвращает траекторию, охватывающую визуальное выделение в заданном диапазоне, расширенную до bounds. |
TextHitInfo |
getVisualOtherHit |
Возвращает точку попадания на противоположной стороне курсора указанной точки попадания. |
protected void |
handleJustify |
Выравнивает этот макет. |
TextHitInfo |
hitTestChar |
Возвращает TextHitInfo, соответствующий указанной точке. |
TextHitInfo |
hitTestChar |
Возвращает TextHitInfo, соответствующий указанной точке. |
void |
hitToPoint |
Преобразует точку попадания в точку в стандартных координатах. |
boolean |
isLeftToRight() |
Возвращает true, если у этого TextLayout направление слева направо или false, если направление справа налево. |
boolean |
isVertical() |
Возвращает true, если этот TextLayout вертикальный. |
String |
toString() |
Возвращает отладочную информацию для этого TextLayout. |
Подробное описание полей
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
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:
getBaseline
public byte getBaseline()
TextLayout. Базовая линия — одно из значений, определённых в Font, такие как римская, центрированная и висячая. Подъём и спуск относительны к этой базовой линии. baselineOffsets также относительны к этой базовой линии.- Returns:
- базовая линия этого
TextLayout. - See Also:
getBaselineOffsets
public float[] getBaselineOffsets()
TextLayout. Массив индексируется одним из значений, определённых в Font, такие как римская, центрированная и висячая. Значения относительны к базовой линии этого объекта TextLayout, поэтому getBaselineOffsets[getBaseline()] == 0. Смещения добавляются к позиции базовой линии объекта TextLayout, чтобы получить позицию новой базовой линии.
- Returns:
- массив смещений, содержащий базовые линии, используемые для этого
TextLayout. - See Also:
getAdvance
public float getAdvance()
TextLayout. Отступ — это расстояние от начала до отступа самого правого (самого нижнего) символа. Это координаты, относительные к базовой линии.- Returns:
- отступ этого
TextLayout.
getVisibleAdvance
public float getVisibleAdvance()
TextLayout, минус хвостовые пробелы. Это координаты, относительные к базовой линии.- Returns:
- отступ этого
TextLayoutбез хвостовых пробелов. - See Also:
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- контекст отрисовкиFontRenderContextGraphics. -
x- координата x, в которой необходимо отрисовать этотTextLayout. -
y- координата y, в которой необходимо отрисовать этотTextLayout. - Возвращает:
- объект
Rectangle, охватывающий пиксели, которые будут затронуты. - С:
- 1.6
- См. также:
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— границы, для которых строится информация о курсоре. Границы указаны в координатах, относительных к базовой линии. - Возвращает:
- двухэлементный массив, содержащий положение и наклон курсора. Возвращаемая информация о курсоре находится в координатах, относительных к базовой линии.
- См. также:
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
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- прямоугольник границ, до которых следует расширить выделение. Координаты заданы относительно базовой линии. - Возвращает:
- фигуру, охватывающую выделение. Координаты заданы в стандартном формате.
- См. также:
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- прямоугольник границ, до которых следует расширить выделение. Координаты заданы относительно базовой линии. - Возвращает:
- объект, охватывающий выделение. Координаты заданы в стандартном формате.
- См. также:
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)
- Параметры:
-
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)
equals(Object).- Параметры:
-
rhs- макет для сравнения с этим макетом - Возвращает:
- true, если указанный макет равен этому макету.
toString
draw
public void draw(Graphics2D g2, float x, float y)
TextLayout в указанном месте в указанном контексте Graphics2D. Начало макета помещается в x, y. Отрисовка может затронуть любые точки в пределах getBounds() от этого положения. Это не изменяет g2. Текст отображается вдоль базовой линии.- Параметры:
-
g2- контекстGraphics2Dдля отображения макета -
x- координата X начала этогоTextLayout -
y- координата Y начала этогоTextLayout - См. также:
getOutline
public Shape getOutline(AffineTransform tx)
Shape, представляющий контур этого TextLayout.- Параметры:
-
tx- необязательное преобразованиеAffineTransformдля применения к контуру этогоTextLayout. - Возвращает:
- объект
Shape, который является контуром этогоTextLayout. Это координаты в стандартном формате.
getLayoutPath
public LayoutPath getLayoutPath()
- Возвращает:
- путь макета
- С тех пор как:
- 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