Класс 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, связанные с отображением, — в стандартных координатах.
- См. также:
Краткое описание вложенных классов
| Modifier and Type | Class | Description |
|---|---|---|
static class |
TextLayout.CaretPolicy |
Определяет политику определения сильной позиции курсора. |
Краткое описание полей
| Modifier and Type | Field | Description |
|---|---|---|
static final TextLayout.CaretPolicy |
DEFAULT_CARET_POLICY |
Это CaretPolicy используется, когда клиент не указывает политику. |
Краткое описание конструкторов
| Конструктор | Description |
|---|---|
TextLayout |
|
TextLayout |
Создаёт TextLayout из String и набора атрибутов. |
TextLayout |
Создаёт TextLayout из итератора по форматированному тексту. |
Краткое описание методов
| Modifier and Type | Method | Description |
|---|---|---|
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
protected Object clone()
TextLayout.- Переопределяет:
-
cloneв классеObject - Возвращает:
- клонированный экземпляр.
- См. также:
getJustifiedLayout
public TextLayout getJustifiedLayout(float justificationWidth)
TextLayout , выровненного по указанной ширине. Если этот TextLayout уже выровнен, выбрасывается исключение. Если коэффициент выравнивания этого объекта TextLayout равен нулю, возвращается TextLayout , идентичный этому TextLayout.
- Параметры:
-
justificationWidth- ширина, используемая при выравнивании строки. Для лучших результатов она не должна сильно отличаться от текущего отступа строки. - Возвращает:
TextLayout, выровненный по указанной ширине.- Исключения:
-
Error- если это макет уже выровнен, выбрасывается ошибка.
handleJustify
protected void handleJustify(float justificationWidth)
Некоторые фрагменты кода могут полагаться на неизменяемость макетов. Подклассы не должны вызывать этот метод напрямую, а вместо этого должны вызывать getJustifiedLayout, который вызовет этот метод на клоне этого макета, сохранив исходный макет.
- Параметры:
-
justificationWidth- ширина, используемая при выравнивании строки. Для лучших результатов она не должна сильно отличаться от текущего отступа строки. - См. также:
getBaseline
public byte getBaseline()
TextLayout. Базовая линия — это одно из значений, определённых в Font, такие как римская, центрированная и подвешенная. Подъём и опускание относятся к этой базовой линии. baselineOffsets также относятся к этой базовой линии.- Возвращает:
- базовую линию этого
TextLayout. - См. также:
getBaselineOffsets
public float[] getBaselineOffsets()
TextLayout. Элементы массива индексируются одним из значений, определённых в Font, такие как римская, центрированная и подвешенная. Значения относятся к базовой линии этого объекта 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, используются пиксельные границы этого TextLayout.- Parameters:
-
frc- контекст рендеринга графикиGraphics. -
x- координата x, в которой нужно отобразить этоTextLayout. -
y- координата y, в которой нужно отобразить этоTextLayout. - Returns:
- объект
Rectangle, ограничивающий пиксели, которые будут затронуты. - Since:
- 1.6
- See Also:
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:
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
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:
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:
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, охватывающий границы черного ящика. Это в стандартных координатах.
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:
getOutline
public Shape getOutline(AffineTransform tx)
Shape , представляющий контур этого TextLayout.- Parameters:
-
tx- необязательныйAffineTransformдля применения к контуру этогоTextLayout. - Returns:
- a
Shape, являющийся контуром этогоTextLayout. Это стандартные координаты.
getLayoutPath
public LayoutPath getLayoutPath()
- 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