Spec-Zone.ru › OpenJDK 8

Класс 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

Этот CaretPolicy используется, когда клиент не задаёт политику.

Конструкторы

Конструктор и описание
TextLayout(AttributedCharacterIterator text, FontRenderContext frc)

Создаёт объект TextLayout из итератора по форматированному тексту.

TextLayout(String string, Font font, FontRenderContext frc)

Создаёт объект TextLayout из объекта String и Font.

TextLayout(String string, Map<? extends AttributedCharacterIterator.Attribute,?> attributes, FontRenderContext frc)

Создаёт объект TextLayout из объекта String и набора атрибутов.

Методы

Модификатор и тип Метод и описание
protected Object clone()

Создаёт копию этого TextLayout.

void draw(Graphics2D g2, float x, float y)

Отображает этот TextLayout в указанном месте в контексте указанной Graphics2D.

boolean equals(Object obj)

Возвращает true, если указанный Object является объектом TextLayout и если указанный Object равен этому TextLayout.

boolean equals(TextLayout rhs)

Возвращает true, если два макета равны.

float getAdvance()

Возвращает отступ этого TextLayout.

float getAscent()

Возвращает восходящую величину этого TextLayout.

byte getBaseline()

Возвращает базовую линию для этого TextLayout.

float[] getBaselineOffsets()

Возвращает массив смещений для базовых линий, используемых для этого TextLayout.

Shape getBlackBoxBounds(int firstEndpoint, int secondEndpoint)

Возвращает прямоугольник (black box) границ символов в указанном диапазоне.

Rectangle2D getBounds()

Возвращает границы этого TextLayout.

float[] getCaretInfo(TextHitInfo hit)

Возвращает информацию о курсоре, соответствующем hit.

float[] getCaretInfo(TextHitInfo hit, Rectangle2D bounds)

Возвращает информацию о курсоре, соответствующем hit.

Shape getCaretShape(TextHitInfo hit)

Возвращает Shape, представляющий курсор в указанной позиции внутри естественных границ этого TextLayout.

Shape getCaretShape(TextHitInfo hit, Rectangle2D bounds)

Возвращает Shape, представляющий курсор в указанной позиции внутри указанных границ.

Shape[] getCaretShapes(int offset)

Возвращает две траектории, соответствующие сильному и слабому курсору.

Shape[] getCaretShapes(int offset, Rectangle2D bounds)

Возвращает две траектории, соответствующие сильному и слабому курсору.

Shape[] getCaretShapes(int offset, Rectangle2D bounds, TextLayout.CaretPolicy policy)

Возвращает две траектории, соответствующие сильному и слабому курсору.

int getCharacterCount()

Возвращает количество символов, представленных этим TextLayout.

byte getCharacterLevel(int index)

Возвращает уровень символа в позиции index.

float getDescent()

Возвращает нисходящую величину этого TextLayout.

TextLayout getJustifiedLayout(float justificationWidth)

Создаёт копию этого TextLayout, выровненную по заданной ширине.

LayoutPath getLayoutPath()

Возвращает LayoutPath или null, если траектория макета — это стандартная траектория (x отображается как отступ, y как смещение).

float getLeading()

Возвращает ведущее значение TextLayout.

Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint)

Возвращает Shape, охватывающий логический выделенный фрагмент в указанном диапазоне, расширенный до естественных границ этого TextLayout.

Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint, Rectangle2D bounds)

Возвращает Shape, охватывающий логический выделенный фрагмент в указанном диапазоне, расширенный до указанных bounds.

int[] getLogicalRangesForVisualSelection(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)

Возвращает логические диапазоны текста, соответствующие визуальному выделению.

TextHitInfo getNextLeftHit(int offset)

Возвращает позицию (hit) следующего курсора влево (вверх); если такой позиции нет, возвращает null.

TextHitInfo getNextLeftHit(int offset, TextLayout.CaretPolicy policy)

Возвращает позицию (hit) следующего курсора влево (вверх); если такой позиции нет, возвращает null.

TextHitInfo getNextLeftHit(TextHitInfo hit)

Возвращает позицию (hit) следующего курсора влево (вверх); если такой позиции нет, возвращает null.

TextHitInfo getNextRightHit(int offset)

Возвращает позицию (hit) следующего курсора вправо (вниз); если такой позиции нет, возвращает null.

TextHitInfo getNextRightHit(int offset, TextLayout.CaretPolicy policy)

Возвращает позицию (hit) следующего курсора вправо (вниз); если такой позиции нет, возвращает null.

TextHitInfo getNextRightHit(TextHitInfo hit)

Возвращает позицию (hit) следующего курсора вправо (вниз); если такой позиции нет, возвращает null.

Shape getOutline(AffineTransform tx)

Возвращает Shape, представляющий контур этого TextLayout.

Rectangle getPixelBounds(FontRenderContext frc, float x, float y)

Возвращает пиксельные границы этого TextLayout при отображении в графике с заданным FontRenderContext в указанном месте.

float getVisibleAdvance()

Возвращает отступ этого TextLayout, минус отступы справа от пробелов.

Shape getVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)

Возвращает Shape, охватывающий визуальное выделение в указанном диапазоне, расширенное до границ.

Shape getVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint, Rectangle2D bounds)

Возвращает траекторию, охватывающую визуальное выделение в указанном диапазоне, расширенную до bounds.

TextHitInfo getVisualOtherHit(TextHitInfo hit)

Возвращает позицию (hit) на противоположной стороне от указанной позиции (hit) курсора.

protected void handleJustify(float justificationWidth)

Выравнивание этого макета.

int hashCode()

Возвращает хэш-код этого TextLayout.

TextHitInfo hitTestChar(float x, float y)

Возвращает TextHitInfo, соответствующий указанной точке.

TextHitInfo hitTestChar(float x, float y, Rectangle2D bounds)

Возвращает TextHitInfo, соответствующий указанной точке.

void hitToPoint(TextHitInfo hit, Point2D point)

Преобразование позиции (hit) в точку в стандартных координатах.

boolean isLeftToRight()

Возвращает true, если у этого TextLayout есть направление слева направо, или false если у него есть направление справа налево.

boolean isVertical()

Возвращает true, если этот TextLayout вертикальный.

String toString()

Возвращает отладочную информацию для этого TextLayout.

Методы, унаследованные от класса 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.

Переопределяет:
clone в классе Object
Возвращает:
клонированный экземпляр.
См. также:
Cloneable

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.

Overrides:
toString в классе Object
Returns:
строковое представление этого textLine.

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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API