Класс TextLayout
- java.lang.Object
-
- java.awt.font.TextLayout
- Все реализованные интерфейсы:
- Cloneable
public final class TextLayout extends Object implements Cloneable
TextLayout — это неизменяемое графическое представление стилизованных данных символов.
Он предоставляет следующие возможности:
- явный анализ и переупорядочение по направлению письма,
- позиционирование и перемещение курсора, включая разделение курсора для текста со смешанным направлением письма,
- выделение, включая логическое и визуальное выделение для текста со смешанным направлением письма,
- несколько базовых линий (римская, висячая и центрированная),
- проверка попадания,
- выравнивание,
- подстановка шрифтов по умолчанию,
- информация о метрике, такая как восходящая, нисходящая части и продвижение, и
- рендеринг
Объект TextLayout может быть отрисован с помощью своего метода draw.
Объект TextLayout может быть создан либо напрямую, либо с помощью LineBreakMeasurer. При прямом создании исходный текст представляет собой один абзац. LineBreakMeasurer позволяет разбивать форматированный текст на строки, которые подходят по заданной ширине. Подробнее см. документацию по LineBreakMeasurer.
Создание объекта TextLayout логически происходит следующим образом:
- извлекаются и анализируются атрибуты абзаца,
- текст анализируется на переупорядочение по направлению письма, и информация о переупорядочении вычисляется при необходимости,
- текст разбивается на фрагменты стилей,
- выбираются шрифты для фрагментов стилей, сначала используется шрифт, если присутствует атрибут
TextAttribute.FONT, иначе вычисляется шрифт по умолчанию, используя определённые атрибуты, - если текст находится на нескольких базовых линиях, фрагменты или подфрагменты далее разбиваются на подфрагменты, совместно использующие одну базовую линию,
- для каждого фрагмента генерируются векторы глифов, используя выбранный шрифт,
- осуществляется окончательное переупорядочение по направлению письма для векторов глифов
Вся графическая информация, возвращаемая методами объекта TextLayout, относится к началу TextLayout, которое является точкой пересечения базовой линии объекта TextLayout с его левым краем. Также предполагается, что координаты, передаваемые в методы объекта TextLayout, относительны к началу объекта TextLayout. Клиентам обычно необходимо переводить между системой координат объекта TextLayout и системой координат другого объекта (например, объекта Graphics).
Объекты TextLayout создаются из форматированного текста, но они не сохраняют ссылку на свой исходный текст. Таким образом, изменения в тексте, ранее используемом для создания объекта TextLayout, не влияют на объект TextLayout.
Три метода объекта TextLayout (getNextRightHit, getNextLeftHit, и hitTestChar) возвращают экземпляры TextHitInfo. Смещения, содержащиеся в этих объектах TextHitInfo, относительны к началу объекта TextLayout, а не к тексту, используемому для создания объекта TextLayout. Аналогично, методы TextLayout, принимающие объекты TextHitInfo в качестве параметров, ожидают, что смещения объекта TextHitInfo будут относительны к TextLayout, а не к какой-либо модели хранения подлежащего текста.
Примеры:
Создание и рисование объекта TextLayout и его ограничительной прямоугольной области:
Graphics2D g = ...;
Point2D loc = ...;
Font font = Font.getFont("Helvetica-bold-italic");
FontRenderContext frc = g.getFontRenderContext();
TextLayout layout = new TextLayout("This is a string", font, frc);
layout.draw(g, (float)loc.getX(), (float)loc.getY());
Rectangle2D bounds = layout.getBounds();
bounds.setRect(bounds.getX()+loc.getX(),
bounds.getY()+loc.getY(),
bounds.getWidth(),
bounds.getHeight());
g.draw(bounds); Проверка попадания по объекту TextLayout (определение символа в заданной графической позиции):
Point2D click = ...;
TextHitInfo hit = layout.hitTestChar(
(float) (click.getX() - loc.getX()),
(float) (click.getY() - loc.getY())); Реагирование на нажатие правой стрелки:
int insertionIndex = ...;
TextHitInfo next = layout.getNextRightHit(insertionIndex);
if (next != null) {
// translate graphics to origin of layout on screen
g.translate(loc.getX(), loc.getY());
Shape[] carets = layout.getCaretShapes(next.getInsertionIndex());
g.draw(carets[0]);
if (carets[1] != null) {
g.draw(carets[1]);
}
} Рисование выделенной области, соответствующей подстроке в исходном тексте. Выделенная область может быть не визуально непрерывной:
// selStart, selLimit should be relative to the layout, // not to the source text int selStart = ..., selLimit = ...; Color selectionColor = ...; Shape selection = layout.getLogicalHighlightShape(selStart, selLimit); // selection may consist of disjoint areas // graphics is assumed to be tranlated to origin of layout g.setColor(selectionColor); g.fill(selection);
Рисование визуально непрерывной выделенной области. Выделенная область может соответствовать более чем одной подстроке в исходном тексте. Диапазоны соответствующих подстрок исходного текста можно получить с помощью getLogicalRangesForVisualSelection():
TextHitInfo selStart = ..., selLimit = ...; Shape selection = layout.getVisualHighlightShape(selStart, selLimit); g.setColor(selectionColor); g.fill(selection); int[] ranges = getLogicalRangesForVisualSelection(selStart, selLimit); // ranges[0], ranges[1] is the first selection range, // ranges[2], ranges[3] is the second selection range, etc.
Примечание: Поворот шрифта может привести к повороту базовых линий текста, а несколько фрагментов с разными поворотами могут привести к изгибу или зигзагу базовой линии. Чтобы учесть эту (редкую) возможность, некоторые API предназначены для возвращения метрик и использования параметров «в координатах, относительных к базовой линии» (например, восходящая, продвижение), а другие — в «стандартных координатах» (например, getBounds). Значения в координатах, относительных к базовой линии, отображают координату «x» как расстояние вдоль базовой линии (положительная x — вперёд по базовой линии), а координату «y» как расстояние вдоль перпендикуляра к базовой линии в точке «x» (положительная y — на 90 градусов по часовой стрелке от вектора базовой линии). Значения в стандартных координатах измеряются вдоль осей x и y, при этом 0,0 находится в начале координат TextLayout. Документация для каждого соответствующего API указывает, в какой системе координат находятся значения. В общем случае, API, связанные с измерениями, находятся в координатах, относительных к базовой линии, а API, связанные с отображением, — в стандартных координатах.
- См. также:
-
LineBreakMeasurer,TextAttribute,TextHitInfo,LayoutPath
Вложенные классы
| Модификатор и тип | Класс и описание |
|---|---|
static class |
TextLayout.CaretPolicy Определяет политику определения сильной позиции курсора. |
Поля
| Модификатор и тип | Поле и описание |
|---|---|
static TextLayout.CaretPolicy |
DEFAULT_CARET_POLICY Этот |
Конструкторы
| Конструктор и описание |
|---|
TextLayout(AttributedCharacterIterator text,
FontRenderContext frc) Создаёт объект |
TextLayout(String string,
Font font,
FontRenderContext frc) Создаёт объект |
TextLayout(String string,
Map<? extends AttributedCharacterIterator.Attribute,?> attributes,
FontRenderContext frc) Создаёт объект |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
protected Object |
clone() Создаёт копию этого |
void |
draw(Graphics2D g2,
float x,
float y) Отображает этот |
boolean |
equals(Object obj) Возвращает |
boolean |
equals(TextLayout rhs) Возвращает |
float |
getAdvance() Возвращает отступ этого |
float |
getAscent() Возвращает восходящую величину этого |
byte |
getBaseline() Возвращает базовую линию для этого |
float[] |
getBaselineOffsets() Возвращает массив смещений для базовых линий, используемых для этого |
Shape |
getBlackBoxBounds(int firstEndpoint,
int secondEndpoint) Возвращает прямоугольник (black box) границ символов в указанном диапазоне. |
Rectangle2D |
getBounds() Возвращает границы этого |
float[] |
getCaretInfo(TextHitInfo hit) Возвращает информацию о курсоре, соответствующем |
float[] |
getCaretInfo(TextHitInfo hit,
Rectangle2D bounds) Возвращает информацию о курсоре, соответствующем |
Shape |
getCaretShape(TextHitInfo hit) Возвращает |
Shape |
getCaretShape(TextHitInfo hit,
Rectangle2D bounds) Возвращает |
Shape[] |
getCaretShapes(int offset) Возвращает две траектории, соответствующие сильному и слабому курсору. |
Shape[] |
getCaretShapes(int offset,
Rectangle2D bounds) Возвращает две траектории, соответствующие сильному и слабому курсору. |
Shape[] |
getCaretShapes(int offset,
Rectangle2D bounds,
TextLayout.CaretPolicy policy) Возвращает две траектории, соответствующие сильному и слабому курсору. |
int |
getCharacterCount() Возвращает количество символов, представленных этим |
byte |
getCharacterLevel(int index) Возвращает уровень символа в позиции |
float |
getDescent() Возвращает нисходящую величину этого |
TextLayout |
getJustifiedLayout(float justificationWidth) Создаёт копию этого |
LayoutPath |
getLayoutPath() Возвращает LayoutPath или null, если траектория макета — это стандартная траектория (x отображается как отступ, y как смещение). |
float |
getLeading() Возвращает ведущее значение |
Shape |
getLogicalHighlightShape(int firstEndpoint,
int secondEndpoint) Возвращает |
Shape |
getLogicalHighlightShape(int firstEndpoint,
int secondEndpoint,
Rectangle2D bounds) Возвращает |
int[] |
getLogicalRangesForVisualSelection(TextHitInfo firstEndpoint,
TextHitInfo secondEndpoint) Возвращает логические диапазоны текста, соответствующие визуальному выделению. |
TextHitInfo |
getNextLeftHit(int offset) Возвращает позицию (hit) следующего курсора влево (вверх); если такой позиции нет, возвращает |
TextHitInfo |
getNextLeftHit(int offset,
TextLayout.CaretPolicy policy) Возвращает позицию (hit) следующего курсора влево (вверх); если такой позиции нет, возвращает |
TextHitInfo |
getNextLeftHit(TextHitInfo hit) Возвращает позицию (hit) следующего курсора влево (вверх); если такой позиции нет, возвращает |
TextHitInfo |
getNextRightHit(int offset) Возвращает позицию (hit) следующего курсора вправо (вниз); если такой позиции нет, возвращает |
TextHitInfo |
getNextRightHit(int offset,
TextLayout.CaretPolicy policy) Возвращает позицию (hit) следующего курсора вправо (вниз); если такой позиции нет, возвращает |
TextHitInfo |
getNextRightHit(TextHitInfo hit) Возвращает позицию (hit) следующего курсора вправо (вниз); если такой позиции нет, возвращает |
Shape |
getOutline(AffineTransform tx) Возвращает |
Rectangle |
getPixelBounds(FontRenderContext frc,
float x,
float y) Возвращает пиксельные границы этого |
float |
getVisibleAdvance() Возвращает отступ этого |
Shape |
getVisualHighlightShape(TextHitInfo firstEndpoint,
TextHitInfo secondEndpoint) Возвращает |
Shape |
getVisualHighlightShape(TextHitInfo firstEndpoint,
TextHitInfo secondEndpoint,
Rectangle2D bounds) Возвращает траекторию, охватывающую визуальное выделение в указанном диапазоне, расширенную до |
TextHitInfo |
getVisualOtherHit(TextHitInfo hit) Возвращает позицию (hit) на противоположной стороне от указанной позиции (hit) курсора. |
protected void |
handleJustify(float justificationWidth) Выравнивание этого макета. |
int |
hashCode() Возвращает хэш-код этого |
TextHitInfo |
hitTestChar(float x,
float y) Возвращает |
TextHitInfo |
hitTestChar(float x,
float y,
Rectangle2D bounds) Возвращает |
void |
hitToPoint(TextHitInfo hit,
Point2D point) Преобразование позиции (hit) в точку в стандартных координатах. |
boolean |
isLeftToRight() Возвращает |
boolean |
isVertical() Возвращает |
String |
toString() Возвращает отладочную информацию для этого |
Методы, унаследованные от класса java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait Поля
DEFAULT_CARET_POLICY
public static final TextLayout.CaretPolicy DEFAULT_CARET_POLICY
Это CaretPolicy используется, когда клиент не указывает политику. При данной политике попадание на символ, направление которого совпадает с направлением строки, сильнее, чем попадание на символ с противоположным направлением. Если направления символов совпадают, попадание на ведущий край символа сильнее, чем попадание на хвостовой край символа.
Конструкторы
TextLayout
public TextLayout(String string,
Font font,
FontRenderContext frc) Создаёт TextLayout из String и Font. Весь текст стилизуется с использованием указанного Font.
String должен указывать на единственный абзац текста, так как для алгоритма двунаправленного отображения требуется весь абзац.
- Параметры:
-
string- текст для отображения -
font-Fontдля стилизации текста -
frc- содержит информацию о графическом устройстве, необходимую для корректного измерения текста. Измерения текста могут незначительно отличаться в зависимости от разрешения устройства и таких атрибутов, как сглаживание. Этот параметр не определяет преобразование междуTextLayoutи пространством пользователя.
TextLayout
public TextLayout(String string,
Map<? extends AttributedCharacterIterator.Attribute,?> attributes,
FontRenderContext frc) Создаёт TextLayout из String и набора атрибутов.
Весь текст стилизуется с использованием предоставленных атрибутов.
string должен указывать на единственный абзац текста, так как для алгоритма двунаправленного отображения требуется весь абзац.
- Параметры:
-
string- текст для отображения -
attributes- атрибуты для стилизации текста -
frc- содержит информацию о графическом устройстве, необходимую для корректного измерения текста. Измерения текста могут незначительно отличаться в зависимости от разрешения устройства и таких атрибутов, как сглаживание. Этот параметр не определяет преобразование междуTextLayoutи пространством пользователя.
TextLayout
public TextLayout(AttributedCharacterIterator text,
FontRenderContext frc) Создаёт TextLayout из итератора по стилизованному тексту.
Итератор должен указывать на единственный абзац текста, так как для алгоритма двунаправленного отображения требуется весь абзац.
- Параметры:
-
text- стилизованный текст для отображения -
frc- содержит информацию о графическом устройстве, необходимую для корректного измерения текста. Измерения текста могут незначительно отличаться в зависимости от разрешения устройства и таких атрибутов, как сглаживание. Этот параметр не определяет преобразование междуTextLayoutи пространством пользователя.
Методы
clone
protected Object clone()
Создаёт копию данного TextLayout.
getJustifiedLayout
public TextLayout getJustifiedLayout(float justificationWidth)
Создаёт копию этого TextLayout выровненную по указанной ширине.
Если этот TextLayout уже выровнен, выбрасывается исключение. Если коэффициент выравнивания этого объекта TextLayout равен нулю, возвращается TextLayout идентичный этому TextLayout.
- Параметры:
-
justificationWidth- ширина, используемая для выравнивания строки. Для наилучших результатов она не должна сильно отличаться от текущего продвижения строки. - Возвращает:
TextLayoutвыровненную по указанной ширине.- Исключения:
-
Error- если это макет уже выровнен, выбрасывается ошибка.
handleJustify
protected void handleJustify(float justificationWidth)
Выравнивание этого макета. Переопределяется подклассами для управления выравниванием (если такие подклассы существуют...). Макет будет выровнен только в том случае, если атрибуты абзаца (из исходного текста, возможно, с умолчанием по атрибутам макета) указывают на ненулевой коэффициент выравнивания. Текст будет выровнен по указанной ширине. Текущая реализация также корректирует подвешенную пунктуацию и хвостовые пробелы для наложения на ширину выравнивания. После выравнивания макет не может быть выровнен повторно.
Некоторые фрагменты кода могут полагаться на неизменяемость макетов. Подклассы не должны вызывать это напрямую, а вместо этого должны вызывать getJustifiedLayout, который вызовет этот метод на клоне этого макета, сохраняя исходный.
- Параметры:
-
justificationWidth- ширина, используемая для выравнивания строки. Для наилучших результатов она не должна сильно отличаться от текущего продвижения строки. - См. также:
getJustifiedLayout(float)
getBaseline
public byte getBaseline()
Возвращает базу линий для этого TextLayout. Основание линий - одно из значений, определённых в Font, которые являются обычным, центрированным и подвешенным. Восхождение и нисхождение относительны к этой базе линий. baselineOffsets также относительны к этой базе линий.
- Возвращает:
- базу линий этого
TextLayout. - См. также:
-
getBaselineOffsets(),Font
getBaselineOffsets
public float[] getBaselineOffsets()
Возвращает массив смещений для баз линий, используемых для этого TextLayout.
Массив индексируется одним из значений, определённых в Font, которые являются обычным, центрированным и подвешенным. Значения относительны к базе линий этого объекта TextLayout, поэтому getBaselineOffsets[getBaseline()] == 0. Смещения добавляются к позиции базы линий объекта TextLayout для получения позиции новой базы линий.
- Возвращает:
- массив смещений, содержащий базы линий, используемые для этого
TextLayout. - См. также:
-
getBaseline(),Font
getAdvance
public float getAdvance()
Возвращает продвижение этого TextLayout. Продвижение - это расстояние от начала до продвижения самого правого (самого нижнего) символа. Это в координатах, относительных к базе линий.
- Возвращает:
- продвижение этого
TextLayout.
getVisibleAdvance
public float getVisibleAdvance()
Возвращает продвижение этого TextLayout, минус хвостовые пробелы. Это в координатах, относительных к базе линий.
- Возвращает:
- продвижение этого
TextLayoutбез хвостовых пробелов. - См. также:
getAdvance()
getAscent
public float getAscent()
Возвращает восхождение этого TextLayout. Восхождение - это расстояние от верхней (правой) части TextLayout до базы линий. Оно всегда положительное или нулевое. Восхождение достаточно для размещения верхних индексов и является максимальным значением суммы восхождения, смещения и базы линий каждого глифа. Восхождение - это максимальное восхождение от базы линий всего текста в TextLayout. Оно в координатах, относительных к базе линий.
- Возвращает:
- восхождение этого
TextLayout.
getDescent
public float getDescent()
Возвращает нисхождение этого TextLayout. Нисхождение - это расстояние от базы линий до нижней (левой) части TextLayout. Оно всегда положительное или нулевое. Нисхождение достаточно для размещения нижних индексов и является максимальным значением суммы нисхождения, смещения и базы линий каждого глифа. Это максимальное нисхождение от базы линий всего текста в TextLayout. Оно в координатах, относительных к базе линий.
- Возвращает:
- нисхождение этого
TextLayout.
getLeading
public float getLeading()
Возвращает ведущую величину TextLayout. Ведущая величина - это рекомендованное межстрочное расстояние для этого TextLayout. Это в координатах, относительных к базе линий.
Ведущая величина вычисляется из ведущей величины, нисхождения и базы линий всех глиф-векторов в TextLayout.
Алгоритм примерно следующий:
maxD = 0;
maxDL = 0;
for (GlyphVector g in all glyphvectors) {
maxD = max(maxD, g.getDescent() + offsets[g.getBaseline()]);
maxDL = max(maxDL, g.getDescent() + g.getLeading() +
offsets[g.getBaseline()]);
}
return maxDL - maxD;
- Возвращает:
- ведущую величину этого
TextLayout.
getBounds
public Rectangle2D getBounds()
Возвращает границы этого TextLayout. Границы в стандартных координатах.
Из-за эффектов растрирования эти границы могут не охватывать все пиксели, отрисованные TextLayout.
Они могут не совпадать точно с восхождением, нисхождением, началом или продвижениемTextLayout.- Возвращает:
- a
Rectangle2D- границы этогоTextLayout.
getPixelBounds
public Rectangle getPixelBounds(FontRenderContext frc,
float x,
float y) Возвращает пиксельные границы этого TextLayout при отрисовке на графическом устройстве с заданным FontRenderContext в заданном месте. Контекст графического устройства не обязательно должен быть таким же, как FontRenderContext используемый для создания этого TextLayout, и может быть null. Если оно null, используется FontRenderContext этого TextLayout.
- Параметры:
-
frc-FontRenderContextграфического устройства. -
x- координата x для отрисовки этогоTextLayout. -
y- координата y для отрисовки этогоTextLayout. - Возвращает:
Rectangleограничивающая пиксели, которые будут затронуты.- С тех пор как:
- 1.6
- См. также:
GlyphVector.getPixelBounds(java.awt.font.FontRenderContext, float, float)
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- границы, для которых строится информация о карете. Границы заданы в координатах относительно базовой линии. - Возвращает:
- двухэлементный массив, содержащий положение и наклон каретки. Возвращаемая информация о карете задана в координатах относительно базовой линии.
- См. также:
-
getCaretShapes(int, Rectangle2D, TextLayout.CaretPolicy),Font.getItalicAngle()
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) Возвращает логические диапазоны текста, соответствующие визуальному выделению.
- Parameters:
-
firstEndpoint- конечная точка визуального диапазона -
secondEndpoint- другая конечная точка визуального диапазона. Эта конечная точка может быть меньшеfirstEndpoint. - Returns:
- массив целых чисел, представляющий пары начала/окончания для выбранных диапазонов.
- See Also:
getVisualHighlightShape(TextHitInfo, TextHitInfo, Rectangle2D)
getVisualHighlightShape
public Shape getVisualHighlightShape(TextHitInfo firstEndpoint,
TextHitInfo secondEndpoint,
Rectangle2D bounds) Возвращает путь, охватывающий визуальное выделение в указанном диапазоне, расширенный до bounds.
Если выделение включает крайнюю левую (верхнюю) позицию, выделение расширяется влево (вверх) от bounds. Если выделение включает крайнюю правую (нижнюю) позицию, выделение расширяется вправо (вниз) от границ. Высота (ширина на вертикальных линиях) выделения всегда расширяется до bounds.
Хотя выделение всегда непрерывное, логически выбранный текст может быть не непрерывным на строках с текстом смешанного направления. Логические диапазоны выделенного текста можно получить с помощью getLogicalRangesForVisualSelection. Например, рассмотрим текст 'ABCdef', где заглавные буквы обозначают текст справа налево, отображаемый на строке справа налево, с визуальным выделением от 0L (ведущего края 'A') до 3T (замыкающего края 'd'). Текст отображается следующим образом, с выделенными жирно подчеркнутыми областями:
defCBAЛогические диапазоны выделения составляют 0-3, 4-6 (ABC, ef), потому что визуально непрерывный текст логически не непрерывен. Также обратите внимание, что поскольку выделена правая позиция на макете (справа от 'A'), выделение расширено вправо от границ.
- Parameters:
-
firstEndpoint- один конец визуального выделения -
secondEndpoint- другой конец визуального выделения -
bounds- прямоугольник границ, до которого расширить выделение. Он задан в координатах, относительных к базовой линии. - Returns:
- a
Shapeохватывающий выделение. Это в стандартных координатах. - See Also:
-
getLogicalRangesForVisualSelection(TextHitInfo, TextHitInfo),getLogicalHighlightShape(int, int, Rectangle2D)
getVisualHighlightShape
public Shape getVisualHighlightShape(TextHitInfo firstEndpoint,
TextHitInfo secondEndpoint) Возвращает Shape , охватывающее визуальное выделение в заданном диапазоне, расширенное до границ. Этот метод является удобной перегрузкой getVisualHighlightShape, которая использует естественные границы этого TextLayout.
- Parameters:
-
firstEndpoint- один конец визуального выделения -
secondEndpoint- другой конец визуального выделения - Returns:
- a
Shapeохватывающий выделение. Это в стандартных координатах.
getLogicalHighlightShape
public Shape getLogicalHighlightShape(int firstEndpoint,
int secondEndpoint,
Rectangle2D bounds) Возвращает Shape , охватывающее логическое выделение в заданном диапазоне, расширенное до указанных bounds.
Если диапазон выделения включает первый логический символ, выделение расширяется до части bounds перед началом этого TextLayout. Если диапазон включает последний логический символ, выделение расширяется до части bounds после окончания этого TextLayout. Высота (ширина на вертикальных линиях) выделения всегда расширяется до bounds.
Выделение может быть не непрерывным на строках со смешанным направлением текста. Выделены только те символы в логическом диапазоне между началом и концом. Например, рассмотрим текст 'ABCdef', где заглавные буквы указывают текст справа налево, отображаемый на строке справа налево, с логическим выделением от 0 до 4 ('ABCd'). Текст отображается следующим образом, с выделением, обозначенным жирным шрифтом, а расширением - подчеркиванием:
defCBAВыделение не непрерывно, потому что выбранные символы визуально не непрерывны. Также обратите внимание, что так как диапазон включает первый логический символ (A), выделение расширяется до части
bounds перед началом макета, что в данном случае (строка справа налево) является правой частью bounds.- Parameters:
-
firstEndpoint- конечная точка в диапазоне символов для выделения -
secondEndpoint- другая конечная точка диапазона символов для выделения. Может быть меньшеfirstEndpoint. Диапазон включает символ в min(firstEndpoint, secondEndpoint), но исключает max(firstEndpoint, secondEndpoint). -
bounds- прямоугольник границ, до которого расширить выделение. Он задан в координатах, относительных к базовой линии. - Returns:
- область, охватывающая выделение. Это в стандартных координатах.
- See Also:
getVisualHighlightShape(TextHitInfo, TextHitInfo, Rectangle2D)
getLogicalHighlightShape
public Shape getLogicalHighlightShape(int firstEndpoint,
int secondEndpoint) Возвращает Shape , охватывающее логическое выделение в заданном диапазоне, расширенное до естественных границ этого TextLayout. Этот метод является удобной перегрузкой getLogicalHighlightShape, которая использует естественные границы этого TextLayout.
- Parameters:
-
firstEndpoint- конечная точка в диапазоне символов для выделения -
secondEndpoint- другая конечная точка диапазона символов для выделения. Может быть меньшеfirstEndpoint. Диапазон включает символ в min(firstEndpoint, secondEndpoint), но исключает max(firstEndpoint, secondEndpoint). - Returns:
- a
Shapeохватывающий выделение. Это в стандартных координатах.
getBlackBoxBounds
public Shape getBlackBoxBounds(int firstEndpoint,
int secondEndpoint) Возвращает границы черного поля символов в заданном диапазоне. Границы черного поля — это область, состоящая из объединения ограничивающих прямоугольников всех глифов, соответствующих символам между началом и концом. Эта область может быть несвязная.
- Parameters:
-
firstEndpoint- один конец диапазона символов -
secondEndpoint- другой конец диапазона символов. Может быть меньшеfirstEndpoint. - Returns:
- a
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:
- сведения о символе и крае (ведущем или замыкающем) под указанной точкой.
hashCode
public int hashCode()
Возвращает хэш-код этого TextLayout.
- Overrides:
-
hashCodeв классеObject - Returns:
- хэш-код этого
TextLayout. - See Also:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
equals
public boolean equals(Object obj)
Возвращает true , если указанный Object является объектом TextLayout и если указанный Object равен этому TextLayout.
- Overrides:
-
equalsв классеObject - Parameters:
-
obj-Objectдля проверки на равенство - Returns:
-
true, если указанныйObjectравен этомуTextLayout;falseв противном случае. - See Also:
-
Object.hashCode(),HashMap
equals
public boolean equals(TextLayout rhs)
Возвращает true , если два макета равны. Два макета равны, если они содержат равные glyphvectors в том же порядке.
- Parameters:
-
rhs-TextLayoutдля сравнения с этимTextLayout - Returns:
-
true, если указанныйTextLayoutравен этомуTextLayout.
toString
public String toString()
Возвращает отладочную информацию для этого TextLayout.
draw
public void draw(Graphics2D g2,
float x,
float y) Отображает этот TextLayout в указанном месте в указанном Graphics2D контексте. Начало макета расположено в координатах x, y. Отрисовка может затронуть любую точку в пределах getBounds() от этой позиции. Это оставляет g2 неизменным. Текст отображается вдоль базовой линии.
- Параметры:
-
g2- контекстGraphics2Dдля отображения макета -
x- координата X начала этогоTextLayout -
y- координата Y начала этогоTextLayout - См. также:
getBounds()
getOutline
public Shape getOutline(AffineTransform tx)
Возвращает Shape , представляющий контур этого TextLayout.
- Параметры:
-
tx- необязательноеAffineTransformдля применения к контуру этогоTextLayout. - Возвращает:
Shape, представляющий контур этогоTextLayout. Он представлен в стандартных координатах.
getLayoutPath
public LayoutPath getLayoutPath()
Возвращает LayoutPath или null, если путь макета — это путь по умолчанию (x сопоставлен с продвижением, y — со смещением).
- Возвращает:
- путь макета
- С:
- 1.6
hitToPoint
public void hitToPoint(TextHitInfo hit,
Point2D point) Преобразует попадание в точку в стандартных координатах. Точка находится на базовой линии символа на ведущем или хвостовом краю символа, как соответственно. Если путь прерывается на стороне символа, представленного попаданием, точка будет расположена рядом с символом.
- Параметры:
-
hit- попадание для проверки. Оно должно быть действительным попаданием в TextLayout. -
point- возвращаемая точка. Точка представлена в стандартных координатах. - Исключения:
-
IllegalArgumentException- если попадание не является допустимым для TextLayout. -
NullPointerException- если попадание или точка равны null. - С:
- 1.6
© 1993, 2020, 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.