Класс 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 должен задавать один абзац текста, поскольку для двунаправленного алгоритма необходим целый абзац.
- Параметры:
-
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
getJustifiedLayout
public TextLayout getJustifiedLayout(float justificationWidth)
TextLayout, выровненную по заданной ширине. Если этот TextLayout уже был выровнен, возникает исключение. Если коэффициент выравнивания этого объекта TextLayout равен нулю, возвращается TextLayout, идентичный этому TextLayout.
- Параметры:
-
justificationWidth— ширина, используемая для выравнивания строки. Для достижения наилучших результатов она не должна слишком отличаться от текущего продвижения строки. - Возвращает:
TextLayout, выровненный по заданной ширине.- Вызывает:
-
Error— если этот объект компоновки уже был выровнен, возникает ошибка Error.
handleJustify
protected void handleJustify(float justificationWidth)
Некоторые части кода могут полагаться на неизменяемость компоновок. Подклассам не следует вызывать этот метод напрямую; вместо этого следует вызывать getJustifiedLayout, который применит этот метод к клону данной компоновки, сохранив исходную.
- Параметры:
-
justificationWidth— ширина, используемая для выравнивания строки. Для достижения наилучших результатов она не должна слишком отличаться от текущего продвижения строки. - См. также:
getBaseline
public byte getBaseline()
TextLayout. Базовая линия — одно из значений, определенных в Font: roman, centered и hanging. Восходящие и нисходящие элементы отсчитываются относительно этой базовой линии. baselineOffsets также отсчитываются относительно этой базовой линии.- Возвращает:
- базовую линию этой
TextLayout. - См. также:
getBaselineOffsets
public float[] getBaselineOffsets()
TextLayout. Индексом массива служит одно из значений, определенных в Font: roman, centered и hanging. Значения отсчитываются относительно базовой линии этого объекта TextLayout, поэтому getBaselineOffsets[getBaseline()] == 0. Смещения прибавляются к положению базовой линии объекта TextLayout, чтобы получить положение новой базовой линии.
- Возвращает:
- массив смещений, содержащий базовые линии, используемые в этой
TextLayout. - См. также:
getAdvance
public float getAdvance()
TextLayout. Продвижение — это расстояние от начала координат до конечной точки самого правого (нижнего) символа. Оно задается в координатах относительно базовой линии.- Возвращает:
- продвижение этой
TextLayout.
getVisibleAdvance
public float getVisibleAdvance()
TextLayout за вычетом конечных пробелов. Оно задается в координатах относительно базовой линии.- Возвращает:
- продвижение этой
TextLayoutбез конечных пробелов. - См. также:
getAscent
public float getAscent()
TextLayout. Восходящий элемент — это расстояние от верхней (правой) части TextLayout до базовой линии. Оно всегда положительно или равно нулю. Восходящий элемент достаточен для размещения надстрочного текста и равен максимальной сумме восходящего элемента, смещения и базовой линии каждого глифа. Восходящий элемент — это максимальное расстояние от базовой линии до верхней границы всего текста в TextLayout. Он задается в координатах относительно базовой линии.- Возвращает:
- восходящий элемент этой
TextLayout.
getDescent
public float getDescent()
TextLayout. Нисходящий элемент — это расстояние от базовой линии до нижней (левой) части TextLayout. Оно всегда положительно или равно нулю. Нисходящий элемент достаточен для размещения подстрочного текста и равен максимальной сумме нисходящего элемента, смещения и базовой линии каждого глифа. Это максимальное расстояние от базовой линии до нижней границы всего текста в TextLayout. Оно задается в координатах относительно базовой линии.- Возвращает:
- нисходящий элемент этой
TextLayout.
getLeading
public float getLeading()
TextLayout. Интерлиньяж — это рекомендуемый межстрочный интервал для этой TextLayout. Он задается в координатах относительно базовой линии. Интерлиньяж вычисляется на основе интерлиньяжа, нисходящего элемента и базовой линии всех векторов глифов в TextLayout. Алгоритм в общих чертах выглядит следующим образом:
maxD = 0;
maxDL = 0;
for (GlyphVector g in all glyphvectors) {
maxD = max(maxD, g.getDescent() + offsets[g.getBaseline()]);
maxDL = max(maxDL, g.getDescent() + g.getLeading() +
offsets[g.getBaseline()]);
}
return maxDL - maxD;
- Возвращает:
- интерлиньяж этой
TextLayout.
getBounds
public Rectangle2D getBounds()
TextLayout. Границы заданы в стандартных координатах. Из-за эффектов растеризации эти границы могут не охватывать все пиксели, отрисованные объектом TextLayout.
Они могут точно не совпадать с восходящим и нисходящим элементами, началом координат или продвижением объектаTextLayout.- Возвращает:
Rectangle2D, задающий границы этойTextLayout.
getPixelBounds
public Rectangle getPixelBounds(FontRenderContext frc, float x, float y)
TextLayout при отрисовке в графическом контексте с заданным FontRenderContext в указанном месте. Контекст отрисовки не обязательно должен совпадать с FontRenderContext, использованным для создания этой TextLayout, и может быть равен null. Если он равен null, используется FontRenderContext этой TextLayout.- Параметры:
-
frc—FontRenderContextобъектаGraphics. -
x— координата x, в которой следует отрисовать этуTextLayout. -
y— координата y, в которой следует отрисовать этуTextLayout. - Возвращает:
Rectangle, ограничивающий затрагиваемые пиксели.- С:
- 1.6
- См. также:
isLeftToRight
public boolean isLeftToRight()
true, если базовое направление этой TextLayout — слева направо, или false, если оно — справа налево. TextLayout имеет базовое направление слева направо (LTR) или справа налево (RTL). Базовое направление не зависит от фактического направления текста в строке, которое может быть LTR, RTL или смешанным. По умолчанию компоновки слева направо должны выравниваться по левому краю. Если компоновка находится в строке с табуляцией, позиции табуляции следуют слева направо, поэтому логически последовательные компоновки располагаются слева направо. Для компоновок 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 - Возвращает:
- массив из двух контуров. Элемент с индексом ноль — сильный курсор. Если курсоров два, элемент с индексом один — слабый курсор; в противном случае он равен
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— ограничивающий прямоугольник, до которого нужно расширить выделение. Он задан в координатах относительно базовой линии. - Возвращает:
Shape, охватывающую выделение. Она задана в стандартных координатах.- См. также:
getVisualHighlightShape
public Shape getVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)
Shape, охватывающую визуальное выделение в указанном диапазоне и расширенную до границ. Этот метод является удобной перегрузкой getVisualHighlightShape, использующей естественные границы этой TextLayout.- Параметры:
-
firstEndpoint— один конец визуального выделения -
secondEndpoint— другой конец визуального выделения - Возвращает:
Shape, охватывающую выделение. Она задана в стандартных координатах.
getLogicalHighlightShape
public Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint, Rectangle2D bounds)
Shape, охватывающую логическое выделение в указанном диапазоне и расширенную до заданного bounds. Если диапазон выделения включает первый логический символ, выделение расширяется до части bounds перед началом этого TextLayout. Если диапазон включает последний логический символ, выделение расширяется до части bounds после конца этого TextLayout. Высота (ширина для вертикальных строк) выделения всегда расширяется до bounds.
В строках со смешанным направлением текста выделение может быть несмежным. Выделенными оказываются только символы логического диапазона между началом и концом. Например, рассмотрим текст «ABCdef», где заглавные буквы обозначают текст с письмом справа налево, отображаемый в строке с письмом справа налево, а логическое выделение задано от 0 до 4 («ABCd»). Текст отображается следующим образом: выделение обозначено полужирным шрифтом, а расширение — подчеркиванием:
defCBAВыделение является несмежным, поскольку выделенные символы визуально не смежны. Обратите также внимание: поскольку диапазон включает первый логический символ (A), выделение расширяется до части
bounds перед началом разметки, которая в данном случае (строка с письмом справа налево) является правой частью bounds.- Параметры:
-
firstEndpoint— конечная точка диапазона символов для выделения -
secondEndpoint— другая конечная точка диапазона символов для выделения. Может быть меньше, чемfirstEndpoint. Диапазон включает символ с индексом min(firstEndpoint, secondEndpoint), но не включает символ с индексом max(firstEndpoint, secondEndpoint). -
bounds— ограничивающий прямоугольник, до которого следует расширить выделение. Координаты заданы относительно базовой линии. - Возвращает:
- область, охватывающую выделение. Координаты заданы в стандартной системе координат.
- См. также:
getLogicalHighlightShape
public Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint)
Shape, охватывающую логическое выделение в указанном диапазоне и расширенную до естественных границ этого TextLayout. Этот метод является перегруженным вариантом getLogicalHighlightShape, использующим естественные границы этого TextLayout.- Параметры:
-
firstEndpoint— конечная точка диапазона символов для выделения -
secondEndpoint— другая конечная точка диапазона символов для выделения. Может быть меньше, чемfirstEndpoint. Диапазон включает символ с индексом min(firstEndpoint, secondEndpoint), но не включает символ с индексом max(firstEndpoint, secondEndpoint). - Возвращает:
Shape, охватывающую выделение. Координаты заданы в стандартной системе координат.
getBlackBoxBounds
public Shape getBlackBoxBounds(int firstEndpoint, int secondEndpoint)
- Параметры:
-
firstEndpoint— один конец диапазона символов -
secondEndpoint— другой конец диапазона символов. Может быть меньше, чемfirstEndpoint. - Возвращает:
Shape, охватывающую границы черного прямоугольника. Координаты заданы в стандартной системе координат.
hitTestChar
public TextHitInfo hitTestChar(float x, float y, Rectangle2D bounds)
TextHitInfo, соответствующее указанной точке. Координаты за пределами границ TextLayout соответствуют попаданиям на начальный край первого логического символа или конечный край последнего логического символа, в зависимости от ситуации, независимо от положения этого символа в строке. Для этой проверки используется только направление вдоль базовой линии.- Параметры:
-
x— смещение по X относительно начала этогоTextLayout. Координаты заданы в стандартной системе координат. -
y— смещение по Y относительно начала этогоTextLayout. Координаты заданы в стандартной системе координат. -
bounds— границыTextLayout. Координаты заданы относительно базовой линии. - Возвращает:
- результат проверки попадания, описывающий символ и край (начальный или конечный) под указанной точкой.
hitTestChar
public TextHitInfo hitTestChar(float x, float y)
TextHitInfo, соответствующее указанной точке. Этот метод является перегруженным вариантом hitTestChar, использующим естественные границы этого TextLayout.- Параметры:
-
x— смещение по X относительно начала этогоTextLayout. Координаты заданы в стандартной системе координат. -
y— смещение по Y относительно начала этогоTextLayout. Координаты заданы в стандартной системе координат. - Возвращает:
- результат проверки попадания, описывающий символ и край (начальный или конечный) под указанной точкой.
equals
public boolean equals(TextLayout rhs)
true, если две разметки равны. Соответствует общему контракту equals(Object).- Параметры:
-
rhs—TextLayout, с которым сравнивается этотTextLayout - Возвращает:
-
true, если указанныйTextLayoutравен этомуTextLayout.
toString
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— если hit или point равен 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://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/java/awt/font/TextLayout.html