Spec-Zone.ru › OpenJDK 25

Класс FontMetrics

java.lang.Object
java.awt.FontMetrics
Все реализуемые интерфейсы:
Serializable
public abstract class FontMetrics extends Object implements Serializable
Класс FontMetrics определяет объект метрик шрифта, инкапсулирующий информацию об отображении определённого шрифта на определённом экране.

Примечание для разработчиков подклассов: Поскольку многие из этих методов образуют замкнутые взаимно рекурсивные циклы, необходимо реализовать хотя бы один из методов в каждом таком цикле, чтобы предотвратить бесконечную рекурсию при использовании подкласса. В частности, ниже приведён минимальный рекомендуемый набор методов для переопределения, обеспечивающий корректность и предотвращающий бесконечную рекурсию (хотя возможны и другие наборы методов):

  • getAscent()
  • getLeading()
  • getMaxAdvance()
  • charWidth(char)
  • charsWidth(char[], int, int)

The letter 'p' showing its 'reference point' Обратите внимание, что реализации этих методов неэффективны, поэтому обычно их переопределяют, используя более эффективные реализации, специфичные для конкретного инструментария.

Когда приложение запрашивает размещение символа в позиции (x, y), символ помещается так, чтобы его опорная точка (показанная точкой на сопутствующем изображении) находилась в этой позиции. Опорная точка задаёт горизонтальную линию, называемую базовой линией символа. При обычной печати базовые линии символов должны совпадать.

Кроме того, каждый символ шрифта имеет верхний вынос, нижний вынос и ширину продвижения. Верхний вынос — это расстояние, на которое символ поднимается над базовой линией. Нижний вынос — это расстояние, на которое символ опускается ниже базовой линии. Ширина продвижения указывает позицию, в которой AWT должен разместить следующий символ.

Массив символов или строка также могут иметь верхний вынос, нижний вынос и ширину продвижения. Верхний вынос массива равен максимальному верхнему выносу любого символа в массиве. Нижний вынос равен максимальному нижнему выносу любого символа в массиве. Ширина продвижения равна сумме ширин продвижения всех символов массива. Продвижение String — это расстояние вдоль базовой линии String. Это расстояние представляет собой ширину, которую следует использовать для центрирования или выравнивания по правому краю String.

Обратите внимание, что продвижение String не обязательно равно сумме продвижений его символов, измеренных по отдельности, поскольку ширина символа может меняться в зависимости от контекста. Например, в арабском тексте форма символа может изменяться, чтобы соединяться с другими символами. Кроме того, в некоторых системах письма определённые последовательности символов могут отображаться в виде единой формы, называемой лигатурой. Измерение символов по отдельности не учитывает такие преобразования.

Метрики шрифта отсчитываются относительно базовой линии, то есть в целом не зависят от поворота шрифта (за исключением возможного влияния подгонки по сетке). См. Font.

С версии:
1.0
См. также:
  • Font
  • Сериализованная форма

Краткое описание полей

Модификатор и тип Поле Описание
protected Font font
Фактический Font, на основе которого созданы метрики шрифта.

Краткое описание конструкторов

FontMetrics(Font font)
Модификатор Конструктор Описание
protected
Создаёт новый объект FontMetrics для получения информации о высоте и ширине указанного Font и конкретных глифов символов в этом Font.

Краткое описание методов

Модификатор и тип Метод Описание
int bytesWidth(byte[] data, int off, int len)
Возвращает общую ширину продвижения для отображения указанного массива байтов в этом Font.
int charsWidth(char[] data, int off, int len)
Возвращает общую ширину продвижения для отображения указанного массива символов в этом Font.
int charWidth(char ch)
Возвращает ширину продвижения указанного символа в этом Font.
int charWidth(int codePoint)
Возвращает ширину продвижения указанного символа в этом Font.
int getAscent()
Определяет верхний вынос шрифта Font, описанного этим объектом FontMetrics.
int getDescent()
Определяет нижний вынос шрифта Font, описанного этим объектом FontMetrics.
Font getFont()
Получает Font, описанный этим объектом FontMetrics.
FontRenderContext getFontRenderContext()
Получает FontRenderContext, используемый этим объектом FontMetrics для измерения текста.
int getHeight()
Получает стандартную высоту строки текста в этом шрифте.
int getLeading()
Определяет стандартный интерлиньяж Font, описанного этим объектом FontMetrics.
LineMetrics getLineMetrics(char[] chars, int beginIndex, int limit, Graphics context)
Возвращает объект LineMetrics для указанного массива символов в указанном контексте Graphics.
LineMetrics getLineMetrics(String str, int beginIndex, int limit, Graphics context)
Возвращает объект LineMetrics для указанного String в указанном контексте Graphics.
LineMetrics getLineMetrics(String str, Graphics context)
Возвращает объект LineMetrics для указанного String в указанном контексте Graphics.
LineMetrics getLineMetrics(CharacterIterator ci, int beginIndex, int limit, Graphics context)
Возвращает объект LineMetrics для указанного CharacterIterator в указанном контексте Graphics.
int getMaxAdvance()
Возвращает оценку максимальной ширины продвижения любого символа в Font, описанного этим объектом FontMetrics, с важными оговорками, перечисленными ниже.
int getMaxAscent()
Определяет максимальный верхний вынос Font, описанного этим объектом FontMetrics.
Rectangle2D getMaxCharBounds(Graphics context)
Возвращает границы символа с максимальными границами в указанном контексте Graphics.
int getMaxDecent()
Устарело.
Начиная с JDK версии 1.1.1 заменён на getMaxDescent().
int getMaxDescent()
Определяет максимальный нижний вынос Font, описанного этим объектом FontMetrics.
Rectangle2D getStringBounds(char[] chars, int beginIndex, int limit, Graphics context)
Возвращает границы указанного массива символов в указанном контексте Graphics.
Rectangle2D getStringBounds(String str, int beginIndex, int limit, Graphics context)
Возвращает границы указанного String в указанном контексте Graphics.
Rectangle2D getStringBounds(String str, Graphics context)
Возвращает границы указанного String в указанном контексте Graphics.
Rectangle2D getStringBounds(CharacterIterator ci, int beginIndex, int limit, Graphics context)
Возвращает границы символов с индексами в указанном CharacterIterator в указанном контексте Graphics.
int[] getWidths()
Получает ширины продвижения первых 256 символов в Font.
boolean hasUniformLineMetrics()
Проверяет, имеет ли Font единообразные метрики строк.
int stringWidth(String str)
Возвращает общую ширину продвижения для отображения указанного String в этом Font.
String toString()
Возвращает представление значений этого объекта FontMetrics в виде String.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание полей

font

protected Font font
Исходный Font, на основе которого создаются метрики шрифта. Не может иметь значение null.
См. также:
  • getFont()

Подробное описание конструкторов

FontMetrics

protected FontMetrics(Font font)
Создает новый объект FontMetrics для получения информации о высоте и ширине указанного Font и конкретных глифов символов в этом Font.
Параметры:
font — Font
См. также:
  • Font

Подробное описание методов

getFont

public Font getFont()
Возвращает Font, описанный этим объектом FontMetrics.
Возвращает:
Font, описанный этим объектом FontMetrics.

getFontRenderContext

public FontRenderContext getFontRenderContext()
Возвращает FontRenderContext, используемый этим объектом FontMetrics для измерения текста.

Обратите внимание: методы этого класса, принимающие параметр Graphics, измеряют текст с использованием FontRenderContext этого объекта Graphics, а не этого FontRenderContext

Возвращает:
FontRenderContext, используемый этим объектом FontMetrics.
Начиная с:
1.6

getLeading

public int getLeading()
Определяет стандартный интерлиньяж для Font, описанного этим объектом FontMetrics. Стандартный интерлиньяж, или межстрочный интервал, — это логическая величина пространства, резервируемого между нижней частью одной строки текста и верхней частью следующей строки. Метрика высоты рассчитывается с учетом этого дополнительного пространства.
Возвращает:
стандартный интерлиньяж для Font.
См. также:
  • getHeight()
  • getAscent()
  • getDescent()

getAscent

public int getAscent()
Определяет верхний вынос шрифта для Font, описанного этим объектом FontMetrics. Верхний вынос шрифта — это расстояние от базовой линии шрифта до верхней границы большинства буквенно-цифровых символов. Некоторые символы в Font могут выходить за линию верхнего выноса шрифта.
Возвращает:
верхний вынос шрифта для Font.
См. также:
  • getMaxAscent()

getDescent

public int getDescent()
Определяет нижний вынос шрифта для Font, описанного этим объектом FontMetrics. Нижний вынос шрифта — это расстояние от базовой линии шрифта до нижней границы большинства буквенно-цифровых символов с нижними выносными элементами. Некоторые символы в Font могут выходить за линию нижнего выноса шрифта.
Возвращает:
нижний вынос шрифта для Font.
См. также:
  • getMaxDescent()

getHeight

public int getHeight()
Возвращает стандартную высоту строки текста в этом шрифте. Это расстояние между базовыми линиями соседних строк текста. Оно равно сумме интерлиньяжа, верхнего и нижнего выносов. Из-за округления это значение может отличаться от результата getAscent() + getDescent() + getLeading(). Нет гарантии, что строки текста, расположенные на таком расстоянии друг от друга, не будут пересекаться; они могут накладываться, если некоторые символы выходят за пределы стандартных метрик верхнего или нижнего выноса.
Возвращает:
стандартную высоту шрифта.
См. также:
  • getLeading()
  • getAscent()
  • getDescent()

getMaxAscent

public int getMaxAscent()
Определяет максимальный верхний вынос для Font, описанного этим объектом FontMetrics. Ни один символ не выступает над базовой линией шрифта выше этой границы.
Возвращает:
максимальный верхний вынос любого символа в Font.
См. также:
  • getAscent()

getMaxDescent

public int getMaxDescent()
Определяет максимальный нижний вынос для Font, описанного этим объектом FontMetrics. Ни один символ не выступает под базовой линией шрифта ниже этой границы.
Возвращает:
максимальный нижний вынос любого символа в Font.
См. также:
  • getDescent()

getMaxDecent

@Deprecated public int getMaxDecent()
Устарел.
Начиная с JDK версии 1.1.1 заменен на getMaxDescent().
Предназначен только для обратной совместимости.
Возвращает:
максимальный нижний вынос любого символа в Font.
См. также:
  • getMaxDescent()

getMaxAdvance

public int getMaxAdvance()
Возвращает оценку максимальной ширины продвижения любого символа в Font, описанном этим объектом FontMetrics, с важными оговорками, перечисленными ниже.

Продвижение — это расстояние от крайней левой точки, используемой для позиционирования символа, до крайней правой точки вдоль базовой линии. Оно не совпадает с видимой шириной изображения глифа, представляющего символ.

Продвижение String не обязательно равно сумме продвижений его символов. При необходимости сложной компоновки текста для правильной отрисовки оно может существенно отличаться.

К оговоркам относительно возвращаемого значения относятся следующие:

  • Возвращаемое значение основано на информации из некоторого системного шрифта, и точность этой информации не контролируется AWT.
  • При отображении определенных символов в глифы в некотором контексте отрисовки инструкции самого шрифта вместе с процессом растеризации могут привести к тому, что продвижение некоторых глифов окажется шире указанного.
  • Если запрошен шрифт в некотором стиле, например Font.BOLD, для которого нет точного соответствия, методы, используемые для обеспечения запрошенной отрисовки, также могут привести к тому, что глифы окажутся шире указанного максимума.
  • В зависимости от реализации логическому или физическому шрифту AWT может потребоваться искать некоторые символы в одном или нескольких резервных шрифтах, если основной физический шрифт не поддерживает эти символы. При расчете указанного максимального продвижения некоторые из этих шрифтов могут быть неизвестны или не учитываться. Часто дизайн резервных шрифтов рассчитан на другой алфавит, чем основной шрифт, поэтому ширина их символов может существенно отличаться. Это также может привести к неожиданному результату: шрифт, например Font.MONOSPACED, может отображать глифы разной ширины.
Эти оговорки не представлены пользователю, поскольку все они относятся к деталям реализации, и практически невозможно определить, когда они применяются. Приложение, которому нужна более точная оценка максимального продвижения и известно подмножество символов, которые оно собирается отображать, может запросить продвижение каждого такого символа и найти самый широкий. Однако, как отмечалось выше, поскольку видимая ширина String не обязательно равна сумме продвижений, использовать это значение все равно следует с осторожностью.

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

Возвращает:
оценку максимальной ширины продвижения любого символа в Font или -1, если максимальная ширина продвижения неизвестна.

charWidth

public int charWidth(int codePoint)
Возвращает ширину продвижения указанного символа в этом Font. Продвижение — это расстояние от крайней левой до крайней правой точки на базовой линии символа. Обратите внимание, что продвижение String не обязательно равно сумме продвижений его символов.

Этот метод не проверяет, является ли указанный символ допустимой кодовой точкой Unicode. При необходимости вызывающий код должен проверить значение символа с помощью Character.isValidCodePoint.

Параметры:
codePoint — символ (кодовая точка Unicode), ширину которого нужно измерить
Возвращает:
ширину продвижения указанного символа в Font, описанном этим объектом FontMetrics.
См. также:
  • charsWidth(char[], int, int)
  • stringWidth(String)

charWidth

public int charWidth(char ch)
Возвращает ширину продвижения указанного символа в этом Font. Продвижение — это расстояние от крайней левой до крайней правой точки на базовой линии символа. Обратите внимание, что продвижение String не обязательно равно сумме продвижений его символов.

Примечание: Этот метод не обрабатывает дополнительные символы. Для поддержки всех символов Unicode, включая дополнительные символы, используйте метод charWidth(int).

Параметры:
ch — символ, ширину которого нужно измерить
Возвращает:
ширину продвижения указанного символа в Font, описанном этим объектом FontMetrics.
См. также:
  • charsWidth(char[], int, int)
  • stringWidth(String)

stringWidth

public int stringWidth(String str)
Возвращает общую ширину продвижения, необходимую для отображения указанной String этим Font. Продвижение — это расстояние от крайней левой до крайней правой точки на базовой линии строки.

Обратите внимание, что продвижение String не обязательно равно сумме продвижений его символов.

Параметры:
str — String, ширину которого нужно измерить
Возвращает:
ширину продвижения указанного String в Font, описанном этим объектом FontMetrics.
Исключения:
NullPointerException — если str имеет значение null.
См. также:
  • bytesWidth(byte[], int, int)
  • charsWidth(char[], int, int)
  • getStringBounds(String, Graphics)

charsWidth

public int charsWidth(char[] data, int off, int len)
Возвращает общую ширину продвижения, необходимую для отображения указанного массива символов этим Font. Продвижение — это расстояние от крайней левой до крайней правой точки на базовой линии строки. Продвижение String не обязательно равно сумме продвижений его символов. Это эквивалентно измерению String символов в указанном диапазоне.
Параметры:
data — массив символов, ширину которого нужно измерить
off — начальное смещение символов в массиве
len — количество символов в массиве, ширину которых нужно измерить
Возвращает:
ширину продвижения подмассива указанного массива char в шрифте, описанном этим объектом FontMetrics.
Исключения:
NullPointerException — если data имеет значение null.
IndexOutOfBoundsException — если аргументы off и len указывают на символы за пределами массива data.
См. также:
  • charWidth(int)
  • charWidth(char)
  • bytesWidth(byte[], int, int)
  • stringWidth(String)

bytesWidth

public int bytesWidth(byte[] data, int off, int len)
Возвращает общую ширину продвижения, необходимую для отображения указанного массива байтов этим Font. Продвижение — это расстояние от крайней левой до крайней правой точки на базовой линии строки. Продвижение String не обязательно равно сумме продвижений его символов. Это эквивалентно измерению String символов в указанном диапазоне.
Параметры:
data — массив байтов, ширину которого нужно измерить
off — начальное смещение байтов в массиве
len — количество байтов в массиве, ширину которых нужно измерить
Возвращает:
ширину продвижения подмассива указанного массива byte в Font, описанном этим объектом FontMetrics.
Исключения:
NullPointerException — если data имеет значение null.
IndexOutOfBoundsException — если аргументы off и len указывают на байты за пределами массива data.
См. также:
  • charsWidth(char[], int, int)
  • stringWidth(String)

getWidths

public int[] getWidths()
Возвращает ширину продвижения первых 256 символов в Font. Продвижение — это расстояние от крайней левой до крайней правой точки на базовой линии символа. Обратите внимание, что продвижение String не обязательно равно сумме продвижений его символов.
Возвращает:
массив с шириной продвижения символов в Font, описанном этим объектом FontMetrics.

hasUniformLineMetrics

public boolean hasUniformLineMetrics()
Проверяет, имеет ли Font единообразные метрики строк. Составной шрифт может состоять из нескольких разных шрифтов для поддержки различных наборов символов. В таких случаях объекты FontLineMetrics не являются однородными. Разные шрифты могут иметь разные верхние и нижние выносы, метрики и т. д. Эта информация иногда необходима для измерения строк и расстановки переносов.
Возвращает:
true, если шрифт имеет единообразные метрики строк; в противном случае — false.
См. также:
  • Font.hasUniformLineMetrics()

getLineMetrics

public LineMetrics getLineMetrics(String str, Graphics context)
Возвращает объект LineMetrics для указанного String в контексте указанного Graphics.
Параметры:
str — указанное String
context — контекст указанного Graphics
Возвращает:
объект LineMetrics, созданный с указанными String и контекстом Graphics.
См. также:
  • Font.getLineMetrics(String, FontRenderContext)

getLineMetrics

public LineMetrics getLineMetrics(String str, int beginIndex, int limit, Graphics context)
Возвращает объект LineMetrics для указанного String в контексте указанного Graphics.
Параметры:
str — указанное String
beginIndex — начальное смещение str
limit — конечное смещение str
context — контекст указанного Graphics
Возвращает:
объект LineMetrics, созданный с указанными String и контекстом Graphics.
См. также:
  • Font.getLineMetrics(String, int, int, FontRenderContext)

getLineMetrics

public LineMetrics getLineMetrics(char[] chars, int beginIndex, int limit, Graphics context)
Возвращает объект LineMetrics для указанного массива символов в контексте указанного Graphics.
Параметры:
chars — указанный массив символов
beginIndex — начальное смещение chars
limit — конечное смещение chars
context — контекст указанного Graphics
Возвращает:
объект LineMetrics, созданный с указанным массивом символов и контекстом Graphics.
См. также:
  • Font.getLineMetrics(char[], int, int, FontRenderContext)

getLineMetrics

public LineMetrics getLineMetrics(CharacterIterator ci, int beginIndex, int limit, Graphics context)
Возвращает объект LineMetrics для указанного CharacterIterator в контексте указанного Graphics.
Параметры:
ci — указанный CharacterIterator
beginIndex — начальное смещение в ci
limit — конечный индекс ci
context — контекст указанного Graphics
Возвращает:
объект LineMetrics, созданный с указанными аргументами.
См. также:
  • Font.getLineMetrics(CharacterIterator, int, int, FontRenderContext)

getStringBounds

public Rectangle2D getStringBounds(String str, Graphics context)
Возвращает границы указанного String в контексте указанного Graphics. Границы используются для компоновки String.

Примечание: возвращаемые границы заданы относительно базовой линии (см. class notes).

Параметры:
str — указанное String
context — контекст указанного Graphics
Возвращает:
объект Rectangle2D, представляющий ограничивающий прямоугольник указанного String в контексте указанного Graphics.
См. также:
  • Font.getStringBounds(String, FontRenderContext)

getStringBounds

public Rectangle2D getStringBounds(String str, int beginIndex, int limit, Graphics context)
Возвращает границы указанного String в контексте указанного Graphics. Границы используются для компоновки String.

Примечание: возвращаемые границы заданы относительно базовой линии (см. class notes).

Параметры:
str — указанное String
beginIndex — смещение начала str
limit — конечное смещение str
context — контекст указанного Graphics
Возвращает:
объект Rectangle2D, представляющий ограничивающий прямоугольник указанного String в контексте указанного Graphics.
См. также:
  • Font.getStringBounds(String, int, int, FontRenderContext)

getStringBounds

public Rectangle2D getStringBounds(char[] chars, int beginIndex, int limit, Graphics context)
Возвращает границы указанного массива символов в контексте указанного Graphics. Границы используются для компоновки String, созданного с указанным массивом символов, beginIndex и limit.

Примечание: возвращаемые границы заданы относительно базовой линии (см. class notes).

Параметры:
chars — массив символов
beginIndex — начальное смещение массива символов
limit — конечное смещение массива символов
context — контекст указанного Graphics
Возвращает:
объект Rectangle2D, представляющий ограничивающий прямоугольник указанного массива символов в контексте указанного Graphics.
См. также:
  • Font.getStringBounds(char[], int, int, FontRenderContext)

getStringBounds

public Rectangle2D getStringBounds(CharacterIterator ci, int beginIndex, int limit, Graphics context)
Возвращает границы символов с указанными индексами в CharacterIterator в контексте указанного Graphics.

Примечание: возвращаемые границы заданы относительно базовой линии (см. class notes).

Параметры:
ci — указанный CharacterIterator
beginIndex — начальное смещение в ci
limit — конечный индекс ci
context — контекст указанного Graphics
Возвращает:
объект Rectangle2D, представляющий ограничивающий прямоугольник символов с указанными индексами в CharacterIterator в контексте указанного Graphics.
См. также:
  • Font.getStringBounds(CharacterIterator, int, int, FontRenderContext)

getMaxCharBounds

public Rectangle2D getMaxCharBounds(Graphics context)
Возвращает границы символа с максимальными границами в контексте указанного Graphics.
Параметры:
context — контекст указанного Graphics
Возвращает:
объект Rectangle2D, представляющий ограничивающий прямоугольник символа с максимальными границами.
См. также:
  • Font.getMaxCharBounds(FontRenderContext)

toString

public String toString()
Возвращает представление значений этого объекта FontMetrics в виде String.
Переопределяет:
toString в классе Object
Возвращает:
представление String этого объекта FontMetrics.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая обзоры концепций, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее дочерних компаний в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/java/awt/FontMetrics.html

Spec-Zone.ru

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