Класс 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. |
Методы, объявленные в классе Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Указывает, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
Подробное описание полей
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и пользовательским пространством. - Исключения:
-
IllegalArgumentException— если какой-либо из параметров равен null.
TextLayout
public TextLayout(String string, Map<? extends AttributedCharacterIterator.Attribute, ?> attributes, FontRenderContext frc)
TextLayout из String и набора атрибутов. Для форматирования всего текста используются предоставленные атрибуты.
string должен содержать один абзац текста, поскольку для двунаправленного алгоритма необходим весь абзац.
- Параметры:
-
string— текст для отображения -
attributes— атрибуты, используемые для форматирования текста -
frc— содержит сведения о графическом устройстве, необходимые для правильного измерения текста. Результаты измерения текста могут незначительно различаться в зависимости от разрешения устройства и таких атрибутов, как сглаживание. Этот параметр не задает преобразование междуTextLayoutи пользовательским пространством. - Исключения:
-
IllegalArgumentException— если какой-либо из параметров равен null.
TextLayout
public TextLayout(AttributedCharacterIterator text, FontRenderContext frc)
TextLayout из итератора по форматированному тексту. Итератор должен содержать один абзац текста, поскольку для двунаправленного алгоритма необходим весь абзац.
- Параметры:
-
text— форматированный текст для отображения -
frc— содержит сведения о графическом устройстве, необходимые для правильного измерения текста. Результаты измерения текста могут незначительно различаться в зависимости от разрешения устройства и таких атрибутов, как сглаживание. Этот параметр не задает преобразование междуTextLayoutи пользовательским пространством. - Исключения:
-
IllegalArgumentException— если какой-либо из параметров равен null.
Подробное описание методов
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: обычная, центральная или висячая. Верхний и нижний выносные элементы отсчитываются относительно этой базовой линии. 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, используется FontRenderContext этого TextLayout.- Параметры:
-
frc—FontRenderContextобъектаGraphics. -
x— координата x, в которой нужно отобразить этотTextLayout. -
y— координата y, в которой нужно отобразить этотTextLayout. - Возвращает:
Rectangle, охватывающий пиксели, на которые будет оказано воздействие.- С версии:
- 1.6
- См. также:
isLeftToRight
public boolean isLeftToRight()
true, если базовое направление этого TextLayout — слева направо, или false, если оно — справа налево. Базовое направление TextLayout может быть слева направо (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— ограничивающий прямоугольник, до которого нужно продлить выделение. Он задан в координатах относительно базовой линии. - Возвращает:
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.