Module java.desktop
Package java.awt

Class FontMetrics

java.lang.Object
java.awt.FontMetrics
所有已实现的接口:
Serializable

public abstract class FontMetrics extends Object implements Serializable
FontMetrics类定义了一个字体度量对象,该对象封装了关于特定字体在特定屏幕上呈现的信息。

给子类的注意事项: 由于许多这些方法形成了封闭的、相互递归的循环,您必须小心地实现每个这样的循环中的至少一个方法,以防止在使用子类时出现无限递归。特别是,以下是建议重写的最小方法集,以确保正确性并防止无限递归(尽管其他子集同样可行):

字母'p'显示其'参考点' 请注意,这些方法的实现效率低下,因此通常会用更高效的特定工具包实现进行重写。

当应用程序要求将字符放置在位置(xy)时,字符将被放置,使其参考点(在附带图像中显示为点)放置在该位置。参考点指定了一个称为基线的水平线。在正常打印中,字符的基线应该对齐。

此外,字体中的每个字符都有一个上升、一个下降和一个推进宽度。上升是字符在基线之上上升的量。下降是字符在基线之下下降的量。推进宽度指示 AWT 应该放置下一个字符的位置。

字符数组或字符串也可以具有上升、下降和推进宽度。数组的上升是数组中任何字符的最大上升量。下降是数组中任何字符的最大下降量。推进宽度是字符数组中每个字符的推进宽度之和。字符串的推进是String沿基线的距离。这个距离是应该用于居中或右对齐String的宽度。

请注意,String的推进不一定是其字符单独测量的推进之和,因为字符的宽度可能会根据其上下文而变化。例如,在阿拉伯文本中,字符的形状可能会改变以连接到其他字符。此外,在某些脚本中,某些字符序列可以由单个形状表示,称为连字。单独测量字符不考虑这些转换。

字体度量是基线相关的,这意味着它们通常独立于应用于字体的旋转(除了可能的网格提示效果)。请参见Font

自版本:
1.0
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected Font
    实际的Font从中创建字体度量的字体。
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    FontMetrics(Font font)
    为查找有关指定Font和该Font中特定字符字形的高度和宽度信息创建一个新的FontMetrics对象。
  • Method Summary

    Modifier and Type
    Method
    Description
    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
    确定由此FontMetrics对象描述的Font字体上升
    int
    确定由此FontMetrics对象描述的Font字体下降
    获取由此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的最大上升。
    返回指定Graphics上下文中具有最大边界的字符的边界。
    int
    已弃用。
    从 JDK 版本 1.1.1 开始,已由getMaxDescent()替换。
    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
    返回在此Font中显示指定String的总推进宽度。
    将此FontMetrics对象的值表示为String

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • font

      protected Font font
      实际的Font从中创建字体度量的字体。这个值不能为空。
      参见:
  • Constructor Details

    • FontMetrics

      protected FontMetrics(Font font)
      为查找有关指定Font和该Font中特定字符字形的高度和宽度信息创建一个新的FontMetrics对象。
      参数:
      font - 字体
      参见:
  • Method Details

    • getFont

      public Font getFont()
      获取由此FontMetrics对象描述的Font
      返回:
      FontMetrics对象描述的Font
    • getFontRenderContext

      public FontRenderContext 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 public int getMaxDecent()
      Deprecated.
      As of JDK version 1.1.1, replaced by getMaxDescent().
      仅用于向后兼容。
      返回值:
      任何字符在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

      public int stringWidth(String str)
      返回此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 - 如果offlen参数索引超出data数组的边界。
      参见:
    • bytesWidth

      public int bytesWidth(byte[] data, int off, int len)
      返回此Font中显示指定字节数组的总前进宽度。前进是从最左点到字符串基线上最右点的距离。String的前进不一定是其字符的前进之和。这相当于测量指定范围内字符的String
      参数:
      data - 要测量的字节数组
      off - 数组中字节的起始偏移量
      len - 从数组中要测量的字节数
      返回:
      在由此FontMetrics对象描述的Font中,指定byte数组的子数组的前进宽度。
      抛出:
      NullPointerException - 如果data为null。
      IndexOutOfBoundsException - 如果offlen参数索引超出data数组的范围。
      参见:
    • getWidths

      public int[] getWidths()
      获取Font中前256个字符的前进宽度。前进是从字符基线的最左点到最右点的距离。请注意,String的前进不一定是其字符前进的总和。
      返回:
      存储由此FontMetrics对象描述的Font中字符的前进宽度的数组。
    • hasUniformLineMetrics

      public boolean hasUniformLineMetrics()
      检查Font是否具有统一的行度量。复合字体可能由几种不同的字体组成,以涵盖各种字符集。在这种情况下,FontLineMetrics对象不是统一的。不同的字体可能具有不同的上升、下降、度量等。这些信息有时对于行测量和行断开是必要的。
      返回:
      如果字体具有统一的行度量,则为true;否则为false
      参见:
    • getLineMetrics

      public LineMetrics getLineMetrics(String str, Graphics context)
      返回指定String在指定Graphics上下文中的LineMetrics对象。
      参数:
      str - 指定的String
      context - 指定的Graphics上下文
      返回:
      使用指定的StringGraphics上下文创建的LineMetrics对象。
      参见:
    • getLineMetrics

      public LineMetrics getLineMetrics(String str, int beginIndex, int limit, Graphics context)
      返回指定String在指定Graphics上下文中的LineMetrics对象。
      参数:
      str - 指定的String
      beginIndex - str的初始偏移量
      limit - str的结束偏移量
      context - 指定的Graphics上下文
      返回:
      使用指定的StringGraphics上下文创建的LineMetrics对象。
      参见:
    • getLineMetrics

      public LineMetrics getLineMetrics(char[] chars, int beginIndex, int limit, Graphics context)
      返回指定字符数组在指定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

      public Rectangle2D getStringBounds(String str, Graphics context)
      返回指定String在指定Graphics上下文中的边界。边界用于布局String

      注意:返回的边界是基线相对坐标(请参阅class notes)。

      参数:
      str - 指定的String
      context - 指定的Graphics上下文
      返回:
      在指定Graphics上下文中指定String的边界框的Rectangle2D
      参见:
    • 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上下文
      返回:
      在指定Graphics上下文中指定String的边界框的Rectangle2D
      参见:
    • getStringBounds

      public Rectangle2D getStringBounds(char[] chars, int beginIndex, int limit, Graphics context)
      返回指定字符数组在指定Graphics上下文中的边界。边界用于布局使用指定字符数组、beginIndexlimit创建的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

      public Rectangle2D getMaxCharBounds(Graphics context)
      返回指定Graphics上下文中具有最大边界的字符的边界。
      参数:
      context - 指定的Graphics上下文
      返回:
      是具有最大边界的字符的边界框的Rectangle2D
      参见:
    • toString

      public String toString()
      将此FontMetrics对象的值表示为String
      覆盖:
      toString 在类 Object
      返回:
      一个String表示此FontMetrics对象。