- 所有已实现的接口:
-
Serializable
FontMetrics类定义了一个字体度量对象,该对象封装了关于特定字体在特定屏幕上呈现的信息。
给子类的注意事项: 由于许多这些方法形成了封闭的、相互递归的循环,您必须小心地实现每个这样的循环中的至少一个方法,以防止在使用子类时出现无限递归。特别是,以下是建议重写的最小方法集,以确保正确性并防止无限递归(尽管其他子集同样可行):
请注意,这些方法的实现效率低下,因此通常会用更高效的特定工具包实现进行重写。
当应用程序要求将字符放置在位置(x,y)时,字符将被放置,使其参考点(在附带图像中显示为点)放置在该位置。参考点指定了一个称为基线的水平线。在正常打印中,字符的基线应该对齐。
此外,字体中的每个字符都有一个上升、一个下降和一个推进宽度。上升是字符在基线之上上升的量。下降是字符在基线之下下降的量。推进宽度指示 AWT 应该放置下一个字符的位置。
字符数组或字符串也可以具有上升、下降和推进宽度。数组的上升是数组中任何字符的最大上升量。下降是数组中任何字符的最大下降量。推进宽度是字符数组中每个字符的推进宽度之和。字符串的推进是String沿基线的距离。这个距离是应该用于居中或右对齐String的宽度。
请注意,String的推进不一定是其字符单独测量的推进之和,因为字符的宽度可能会根据其上下文而变化。例如,在阿拉伯文本中,字符的形状可能会改变以连接到其他字符。此外,在某些脚本中,某些字符序列可以由单个形状表示,称为连字。单独测量字符不考虑这些转换。
字体度量是基线相关的,这意味着它们通常独立于应用于字体的旋转(除了可能的网格提示效果)。请参见Font。
- 自版本:
- 1.0
- 参见:
-
Field Summary
Fields -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedFontMetrics(Font font) 为查找有关指定Font和该Font中特定字符字形的高度和宽度信息创建一个新的FontMetrics对象。 -
Method Summary
Modifier and TypeMethodDescriptionintbytesWidth(byte[] data, int off, int len) 返回在此Font中显示指定字节数组的总推进宽度。intcharsWidth(char[] data, int off, int len) 返回在此Font中显示指定字符数组的总推进宽度。intcharWidth(char ch) 返回此Font中指定字符的推进宽度。intcharWidth(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是否具有统一的行度量。intstringWidth(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()替换。