- 所有已实现的接口:
-
Serializable
FontMetrics
类定义了一个字体度量对象,该对象封装了关于特定字体在特定屏幕上呈现的信息。
给子类的注意事项: 由于许多这些方法形成了封闭的、相互递归的循环,您必须小心地实现每个这样的循环中的至少一个方法,以防止在使用子类时出现无限递归。特别是,以下是建议重写的最小方法集,以确保正确性并防止无限递归(尽管其他子集同样可行):
请注意,这些方法的实现效率低下,因此通常会用更高效的特定工具包实现进行重写。
当应用程序要求将字符放置在位置(x,y)时,字符将被放置,使其参考点(在附带图像中显示为点)放置在该位置。参考点指定了一个称为基线的水平线。在正常打印中,字符的基线应该对齐。
此外,字体中的每个字符都有一个上升、一个下降和一个推进宽度。上升是字符在基线之上上升的量。下降是字符在基线之下下降的量。推进宽度指示 AWT 应该放置下一个字符的位置。
字符数组或字符串也可以具有上升、下降和推进宽度。数组的上升是数组中任何字符的最大上升量。下降是数组中任何字符的最大下降量。推进宽度是字符数组中每个字符的推进宽度之和。字符串的推进是String
沿基线的距离。这个距离是应该用于居中或右对齐String
的宽度。
请注意,String
的推进不一定是其字符单独测量的推进之和,因为字符的宽度可能会根据其上下文而变化。例如,在阿拉伯文本中,字符的形状可能会改变以连接到其他字符。此外,在某些脚本中,某些字符序列可以由单个形状表示,称为连字。单独测量字符不考虑这些转换。
字体度量是基线相关的,这意味着它们通常独立于应用于字体的旋转(除了可能的网格提示效果)。请参见Font
。
- 自版本:
- 1.0
- 参见:
-
Field Summary
-
Constructor Summary
ModifierConstructorDescriptionprotected
FontMetrics
(Font font) 为查找有关指定Font
和该Font
中特定字符字形的高度和宽度信息创建一个新的FontMetrics
对象。 -
Method Summary
Modifier and TypeMethodDescriptionint
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
确定由此FontMetrics
对象描述的Font
的字体上升。int
确定由此FontMetrics
对象描述的Font
的字体下降。getFont()
获取由此FontMetrics
对象描述的Font
。获取此FontMetrics
对象用于测量文本的FontRenderContext
。int
获取此字体的一行文本的标准高度。int
确定由此FontMetrics
对象描述的Font
的标准行间距。getLineMetrics
(char[] chars, int beginIndex, int limit, Graphics context) 返回指定字符数组在指定Graphics
上下文中的LineMetrics
对象。getLineMetrics
(String str, int beginIndex, int limit, Graphics context) 返回指定String
在指定Graphics
上下文中的LineMetrics
对象。getLineMetrics
(String str, Graphics context) 返回指定String
在指定Graphics
上下文中的LineMetrics
对象。getLineMetrics
(CharacterIterator ci, int beginIndex, int limit, Graphics context) 返回指定CharacterIterator
在指定Graphics
上下文中的LineMetrics
对象。int
返回由此FontMetrics
对象描述的Font
中任何字符的最大推进宽度的估计值,但有重要的警告,如下所列。int
确定由此FontMetrics
对象描述的Font
的最大上升。getMaxCharBounds
(Graphics context) 返回指定Graphics
上下文中具有最大边界的字符的边界。int
已弃用。int
确定由此FontMetrics
对象描述的Font
的最大下降。getStringBounds
(char[] chars, int beginIndex, int limit, Graphics context) 返回指定字符数组在指定Graphics
上下文中的边界。getStringBounds
(String str, int beginIndex, int limit, Graphics context) 返回指定String
在指定Graphics
上下文中的边界。getStringBounds
(String str, Graphics context) 返回指定String
在指定Graphics
上下文中的边界。getStringBounds
(CharacterIterator ci, int beginIndex, int limit, Graphics context) 返回指定CharacterIterator
中索引的字符在指定Graphics
上下文中的边界。int[]
获取Font
中前 256 个字符的推进宽度。boolean
检查Font
是否具有统一的行度量。int
stringWidth
(String str) 返回在此Font
中显示指定String
的总推进宽度。toString()
将此FontMetrics
对象的值表示为String
。
-
Field Details
-
font
实际的Font
从中创建字体度量的字体。这个值不能为空。- 参见:
-
-
Constructor Details
-
FontMetrics
为查找有关指定Font
和该Font
中特定字符字形的高度和宽度信息创建一个新的FontMetrics
对象。- 参数:
-
font
- 字体 - 参见:
-
-
Method Details
-
getFont
获取由此FontMetrics
对象描述的Font
。- 返回:
-
此
FontMetrics
对象描述的Font
。
-
getFontRenderContext
获取此FontMetrics
对象用于测量文本的FontRenderContext
。请注意,此类中使用
Graphics
参数的方法使用该Graphics
对象的FontRenderContext
来测量文本,而不是此FontRenderContext
。- 返回:
-
此
FontMetrics
对象使用的FontRenderContext
。 - 自版本:
- 1.6
-
getLeading
public int getLeading()确定由此FontMetrics
对象描述的Font
的标准行间距。标准行间距是应该在一行文本的下降和下一行文本的上升之间保留的逻辑空间量。高度度量计算为包括此额外空间。- 返回:
-
Font
的标准行间距。 - 参见:
-
getAscent
public int getAscent()确定由此FontMetrics
对象描述的Font
的字体上升。字体上升是从字体基线到大多数字母数字字符顶部的距离。字体中的一些字符可能会延伸到字体上升线之上。- 返回:
-
Font
的字体上升。 - 参见:
-
getDescent
public int getDescent()确定由此FontMetrics
对象描述的Font
的字体下降。字体下降是从字体基线到具有下降符号的大多数字母数字字符底部的距离。字体中的一些字符可能会延伸到字体下降线之下。- 返回值:
-
Font
的字体下降。 - 参见:
-
getHeight
public int getHeight()获取此字体文本行的标准高度。这是相邻文本行基线之间的距离。它是前导 + 上升 + 下降的总和。由于四舍五入,这可能与getAscent() + getDescent() + getLeading()不同。不能保证以此距离间隔的文本行是不相交的;如果某些字符超过标准上升或标准下降度量,这些行可能会重叠。- 返回值:
- 字体的标准高度。
- 参见:
-
getMaxAscent
public int getMaxAscent()确定由此FontMetrics
对象描述的Font
的最大上升。没有字符比此高度更高地延伸到字体的基线之上。- 返回值:
-
任何字符在
Font
中的最大上升。 - 参见:
-
getMaxDescent
public int getMaxDescent()确定由此FontMetrics
对象描述的Font
的最大下降。没有字符比此高度更低地延伸到字体的基线之下。- 返回值:
-
任何字符在
Font
中的最大下降。 - 参见:
-
getMaxDecent
Deprecated.As of JDK version 1.1.1, replaced bygetMaxDescent()
.仅用于向后兼容。- 返回值:
-
任何字符在
Font
中的最大下降。 - 参见:
-
getMaxAdvance
public int getMaxAdvance()返回由此FontMetrics
对象描述的Font
中任何字符的最大前进宽度的估计,具有重要的警告,如下所列。前进是从用于定位字符的最左点到基线上最右点的距离。这与表示字符的字形图像的可见宽度不同。
String
的前进不一定是其字符的前进之和。如果需要进行正确渲染,可能会有很大的不同。报告值的一些警告包括
- 返回的值依赖于一些底层系统字体的信息,该信息的正确性不在AWT的控制范围内。
- 当特定字符在某些渲染上下文中映射到字形时,字体本身的指令以及光栅化过程可能导致某些字形的前进比报告的更宽。
- 当请求某种样式的字体,例如
Font.BOLD
,而没有精确匹配可用时,为满足请求的渲染可能导致类似的结果,即字形可能比报告的最大宽度更宽。 - 根据实现,AWT逻辑字体或物理字体可能需要从一个或多个“回退”字体中定位一些字符,当主要底层物理字体不支持字符时。这些字体可能并非所有都在计算报告的最大前进时已知或考虑。这些回退字体的设计中心通常与主字体的设计中心不同,因此它们的前进可能会有很大不同。这也可能导致意想不到的结果,即
Font.MONOSPACED
之类的字体可能呈现不同宽度的字形。
String
的显示宽度不一定是字符前进之和,因此仍然需要谨慎使用该值。总之,此方法不提供绝对保证,甚至不能保证在某个误差范围内是正确的。因此,最多只能用于估计足以显示某些尚不知道的字符的字体的总空间。这可能是一个高估,也可能是一个低估,具体取决于特定的文本和渲染上下文。
- 返回值:
-
由此
FontMetrics
对象描述的Font
中任何字符的最大前进宽度的估计,如果最大前进宽度未知,则返回-1
。
-
charWidth
public int charWidth(int codePoint) 返回此Font
中指定字符的前进宽度。前进是从字符基线上最左点到最右点的距离。请注意,String
的前进不一定是其字符的前进之和。注意:此方法无法处理补充字符。要支持所有Unicode字符,包括补充字符,请使用
charWidth(int)
方法。- 参数:
-
codePoint
- 要测量的字符(Unicode代码点) - 返回值:
-
由此
FontMetrics
对象描述的Font
中指定字符的前进宽度。 - 参见:
-
charWidth
public int charWidth(char ch) 返回此Font
中指定字符的前进宽度。前进是从字符基线上最左点到最右点的距离。请注意,String
的前进不一定是其字符的前进之和。注意:此方法无法处理补充字符。要支持所有Unicode字符,包括补充字符,请使用
charWidth(int)
方法。- 参数:
-
ch
- 要测量的字符 - 返回值:
-
由此
FontMetrics
对象描述的Font
中指定字符的前进宽度。 - 参见:
-
stringWidth
返回此Font
中显示指定String
的总前进宽度。前进是从最左点到字符串基线上最右点的距离。请注意,
String
的前进不一定是其字符的前进之和。- 参数:
-
str
- 要测量的String
- 返回值:
-
由此
FontMetrics
描述的Font
中指定String
的前进宽度。 - 抛出:
-
NullPointerException
- 如果str为null。 - 参见:
-
charsWidth
public int charsWidth(char[] data, int off, int len) 返回此Font
中显示指定字符数组的总前进宽度。前进是从最左点到字符串基线上最右点的距离。String
的前进不一定是其字符的前进之和。这相当于测量指定范围内字符的String
。- 参数:
-
data
- 要测量的字符数组 -
off
- 数组中字符的起始偏移量 -
len
- 从数组中测量的字符数 - 返回值:
-
由此
FontMetrics
描述的字体中子数组的前进宽度。 - 抛出:
-
NullPointerException
- 如果data
为null。 -
IndexOutOfBoundsException
- 如果off
和len
参数索引超出data
数组的边界。 - 参见:
-
bytesWidth
public int bytesWidth(byte[] data, int off, int len) 返回此Font
中显示指定字节数组的总前进宽度。前进是从最左点到字符串基线上最右点的距离。String
的前进不一定是其字符的前进之和。这相当于测量指定范围内字符的String
。- 参数:
-
data
- 要测量的字节数组 -
off
- 数组中字节的起始偏移量 -
len
- 从数组中要测量的字节数 - 返回:
-
在由此
FontMetrics
对象描述的Font
中,指定byte
数组的子数组的前进宽度。 - 抛出:
-
NullPointerException
- 如果data
为null。 -
IndexOutOfBoundsException
- 如果off
和len
参数索引超出data
数组的范围。 - 参见:
-
getWidths
public int[] getWidths()获取Font
中前256个字符的前进宽度。前进是从字符基线的最左点到最右点的距离。请注意,String
的前进不一定是其字符前进的总和。- 返回:
-
存储由此
FontMetrics
对象描述的Font
中字符的前进宽度的数组。
-
hasUniformLineMetrics
public boolean hasUniformLineMetrics()检查Font
是否具有统一的行度量。复合字体可能由几种不同的字体组成,以涵盖各种字符集。在这种情况下,FontLineMetrics
对象不是统一的。不同的字体可能具有不同的上升、下降、度量等。这些信息有时对于行测量和行断开是必要的。- 返回:
-
如果字体具有统一的行度量,则为
true
;否则为false
。 - 参见:
-
getLineMetrics
返回指定String
在指定Graphics
上下文中的LineMetrics
对象。- 参数:
-
str
- 指定的String
-
context
- 指定的Graphics
上下文 - 返回:
-
使用指定的
String
和Graphics
上下文创建的LineMetrics
对象。 - 参见:
-
getLineMetrics
返回指定String
在指定Graphics
上下文中的LineMetrics
对象。- 参数:
-
str
- 指定的String
-
beginIndex
-str
的初始偏移量 -
limit
-str
的结束偏移量 -
context
- 指定的Graphics
上下文 - 返回:
-
使用指定的
String
和Graphics
上下文创建的LineMetrics
对象。 - 参见:
-
getLineMetrics
返回指定字符数组在指定Graphics
上下文中的LineMetrics
对象。- 参数:
-
chars
- 指定的字符数组 -
beginIndex
- 字符数组的初始偏移量 -
limit
- 字符数组的结束偏移量 -
context
- 指定的Graphics
上下文 - 返回:
-
使用指定字符数组和
Graphics
上下文创建的LineMetrics
对象。 - 参见:
-
getLineMetrics
public LineMetrics getLineMetrics(CharacterIterator ci, int beginIndex, int limit, Graphics context) 返回指定CharacterIterator
在指定Graphics
上下文中的LineMetrics
对象。- 参数:
-
ci
- 指定的CharacterIterator
-
beginIndex
-ci
中的初始偏移量 -
limit
-ci
的结束索引 -
context
- 指定的Graphics
上下文 - 返回:
-
使用指定参数创建的
LineMetrics
对象。 - 参见:
-
getStringBounds
返回指定String
在指定Graphics
上下文中的边界。边界用于布局String
。注意:返回的边界是基线相对坐标(请参阅
class notes
)。- 参数:
-
str
- 指定的String
-
context
- 指定的Graphics
上下文 - 返回:
-
在指定
Graphics
上下文中指定String
的边界框的Rectangle2D
。 - 参见:
-
getStringBounds
返回指定String
在指定Graphics
上下文中的边界。边界用于布局String
。注意:返回的边界是基线相对坐标(请参阅
class notes
)。- 参数:
-
str
- 指定的String
-
beginIndex
-str
的开始偏移量 -
limit
-str
的结束偏移量 -
context
- 指定的Graphics
上下文 - 返回:
-
在指定
Graphics
上下文中指定String
的边界框的Rectangle2D
。 - 参见:
-
getStringBounds
返回指定字符数组在指定Graphics
上下文中的边界。边界用于布局使用指定字符数组、beginIndex
和limit
创建的String
。注意:返回的边界是基线相对坐标(请参阅
class notes
)。- 参数:
-
chars
- 字符数组 -
beginIndex
- 字符数组的初始偏移量 -
limit
- 字符数组的结束偏移量 -
context
- 指定的Graphics
上下文 - 返回:
-
在指定
Graphics
上下文中指定字符数组的边界框的Rectangle2D
。 - 参见:
-
getStringBounds
public Rectangle2D getStringBounds(CharacterIterator ci, int beginIndex, int limit, Graphics context) 返回指定CharacterIterator
中索引的字符在指定Graphics
上下文中的边界。注意:返回的边界是基线相对坐标(请参阅
class notes
)。- 参数:
-
ci
- 指定的CharacterIterator
-
beginIndex
-ci
中的初始偏移量 -
limit
-ci
的结束索引 -
context
- 指定的Graphics
上下文 - 返回:
-
在指定
Graphics
上下文中指定CharacterIterator
中索引的字符的边界框的Rectangle2D
。 - 参见:
-
getMaxCharBounds
返回指定Graphics
上下文中具有最大边界的字符的边界。- 参数:
-
context
- 指定的Graphics
上下文 - 返回:
-
是具有最大边界的字符的边界框的
Rectangle2D
。 - 参见:
-
toString
将此FontMetrics
对象的值表示为String
。
-
getMaxDescent()
替换。