模块 java.desktop
 java.awt

类 Font

java.lang.Object
java.awt.Font
所有已实现的接口:
Serializable
已知子类:
FontUIResource

public class Font extends Object implements Serializable
Font 类表示字体,用于以可见方式呈现文本。字体提供将 characters 序列映射到 glyphs 序列以及在 GraphicsComponent 对象上呈现字形序列所需的信息。

字符和字形

character 是以抽象方式表示字母、数字或标点符号等项目的符号。例如,'g',拉丁文小写字母 G,是一个字符。

glyph 是用于呈现字符或字符序列的形状。在简单的书写系统中,例如拉丁语,通常一个字形代表一个字符。然而,一般而言,字符和字形不具有一一对应关系。例如,字符 'á' 带尖音符号的拉丁文小写字母 A 可以用两个字形表示:一个代表 'a',一个代表 '´'。另一方面,两个字符的字符串“fi”可以由单个字形表示,即“fi”连字。在复杂的书写系统中,例如阿拉伯语或南亚和东南亚书写系统,字符和字形之间的关系可能更加复杂,并且涉及与上下文相关的字形选择以及字形重新排序。字体封装了呈现一组选定字符所需的字形集合,以及将字符序列映射到相应字形序列所需的表格。

物理和逻辑字体

Java 平台区分两种字体:physical 字体和 logical 字体。

Physical 字体是包含字形数据和表的实际字体库,用于从字符序列映射到字形序列,使用诸如 TrueType 或 PostScript Type 1 之类的字体技术。Java 平台的所有实现都必须支持 TrueType 字体;对其他字体技术的支持取决于实现。物理字体可以使用诸如 Helvetica、Palatino、HonMincho 或任意数量的其他字体名称之类的名称。通常,每种物理字体仅支持一组有限的书写系统,例如,仅拉丁字符或仅日文和基本拉丁文。可用的物理字体集因配置而异。需要特定字体的应用程序可以将它们捆绑起来并使用 createFont 方法实例化它们。

Logical 字体是由 Java 平台定义的五个字体系列,任何 Java 运行时环境都必须支持它们:Serif、SansSerif、Monospaced、Dialog 和 DialogInput。这些逻辑字体不是实际的字体库。相反,逻辑字体名称由 Java 运行时环境映射到物理字体。映射是实现的,通常依赖于locale,因此它们提供的外观和指标各不相同。通常,每个逻辑字体名称都映射到多个物理字体,以覆盖大范围的字符。

对等 AWT 组件,例如 Label TextField ,只能使用逻辑字体。

有关使用物理或逻辑字体的相对优点和缺点的讨论,请参阅 Java教程 文档中的 物理和逻辑字体

字体和名称

一个 Font 可以有很多面,例如 heavy、medium、oblique、gothic 和 regular。所有这些面孔都有相似的排版设计。

您可以从 Font 对象中获得三个不同的名称。 logical font name 只是用于构造字体的名称。 font face name 或简称 font name 是特定字体的名称,例如 Helvetica Bold。 family name 是字体系列的名称,它决定了多个字体的排版设计,例如 Helvetica。

Font 类表示主机系统的系统资源中存在的字体集合中的一个字体实例。例如,Arial Bold 和 Courier Bold Italic 是字体。可以有多个 Font 对象与一个字体相关联,每个对象在大小、样式、转换和字体特征方面都不同。

由于平台限制,例如缺少合适的平台字体来实现逻辑字体,字形可能并不总是使用请求的属性(例如,字体和样式)呈现。

GraphicsEnvironment 类的 getAllFonts 方法返回系统中所有可用字体的数组。这些字体作为 Font 对象返回,大小为 1,具有身份转换和默认字体功能。然后,这些基本字体可用于通过此类中的 deriveFont 方法派生具有不同大小、样式、转换和字体特征的新 Font 对象。

字体和文本属性

Font 支持大多数 TextAttribute s。这使得一些操作(例如渲染带下划线的文本)变得很方便,因为不必显式构造 TextLayout 对象。可以通过使用 MapTextAttribute 值构造或派生它来在字体上设置属性。

某些 TextAttributes 的值不可序列化,因此尝试序列化具有此类值的 Font 实例将不会序列化它们。这意味着从此类流中反序列化的 Font 将不会与包含不可序列化属性的原始 Font 进行比较。这应该很少引起问题,因为这些属性通常只在特殊情况下使用,不太可能被序列化。

  • FOREGROUNDBACKGROUND 使用 Paint 值。子类 Color 是可序列化的,而 GradientPaintTexturePaint 不是。
  • CHAR_REPLACEMENT 使用 GraphicAttribute 值。子类 ShapeGraphicAttributeImageGraphicAttribute 不可序列化。
  • INPUT_METHOD_HIGHLIGHT 使用不可序列化的 InputMethodHighlight 值。参见 InputMethodHighlight

创建 PaintGraphicAttribute 的自定义子类的客户端可以使它们可序列化并避免此问题。使用输入法高亮显示的客户可以将这些转换为当前平台上该高亮显示的特定于平台的属性,并将它们设置在字体上作为解决方法。

基于 Map 的构造函数和 deriveFont API 忽略了 FONT 属性,并且它不被 Font 保留;如果可能存在 FONT 属性,则应使用静态 getFont(java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>) 方法。有关详细信息,请参阅 TextAttribute.FONT

一些属性会导致额外的渲染开销并可能调用布局。如果 Font 具有此类属性,则 hasLayoutAttributes() 方法将返回 true。

注意:字体旋转会导致文本基线旋转。为了考虑到这种(罕见的)可能性,字体 API 被指定为返回指标并采用“在基线相对坐标中”的参数。这会将“x”坐标映射到沿基线的前进(正 x 沿基线向前),并将“y”坐标映射到沿与“x”处基线垂直的距离(正 y 为顺时针 90 度)来自基线向量)。这一点特别重要的 API 被称为具有“基线相对坐标”。

参见:
  • 字段详细信息

    • DIALOG

      public static final String  DIALOG
      逻辑字体“Dialog”的规范系列名称的字符串常量。在 Font 构造中提供名称的编译时验证很有用。
      自从:
      1.6
      参见:
    • DIALOG_INPUT

      public static final String  DIALOG_INPUT
      逻辑字体“DialogInput”的规范系列名称的字符串常量。在 Font 构造中提供名称的编译时验证很有用。
      自从:
      1.6
      参见:
    • SANS_SERIF

      public static final String  SANS_SERIF
      逻辑字体“SansSerif”的规范系列名称的字符串常量。在 Font 构造中提供名称的编译时验证很有用。
      自从:
      1.6
      参见:
    • SERIF

      public static final String  SERIF
      逻辑字体“Serif”的规范系列名称的字符串常量。在 Font 构造中提供名称的编译时验证很有用。
      自从:
      1.6
      参见:
    • MONOSPACED

      public static final String  MONOSPACED
      逻辑字体“Monospaced”的规范系列名称的字符串常量。在 Font 构造中提供名称的编译时验证很有用。
      自从:
      1.6
      参见:
    • PLAIN

      public static final int PLAIN
      朴素的风格不变。
      参见:
    • BOLD

      public static final int BOLD
      大胆的风格不变。这可以与混合样式的其他样式常量(PLAIN 除外)结合使用。
      参见:
    • ITALIC

      public static final int ITALIC
      斜体样式常量。这可以与混合样式的其他样式常量(PLAIN 除外)结合使用。
      参见:
    • ROMAN_BASELINE

      public static final int ROMAN_BASELINE
      大多数罗马文字在布置文本时使用的基线。
      参见:
    • CENTER_BASELINE

      public static final int CENTER_BASELINE
      布局文本时,在中文、日文和韩文等表意文字中使用的基线。
      参见:
    • HANGING_BASELINE

      public static final int HANGING_BASELINE
      布局文本时在梵文和类似脚本中使用的基线。
      参见:
    • TRUETYPE_FONT

      public static final int TRUETYPE_FONT
      标识类型为 TRUETYPE 的字体资源。用于为 createFont(int, java.io.InputStream) 方法指定 TrueType 字体资源。 TrueType 格式被扩展成为 OpenType 格式,它增加了对带有 Postscript 轮廓的字体的支持,因此这个标签引用这些字体,以及那些带有 TrueType 轮廓的字体。
      自从:
      1.3
      参见:
    • TYPE1_FONT

      public static final int TYPE1_FONT
      标识 TYPE1 类型的字体资源。用于向createFont(int, java.io.InputStream) 方法指定Type1字体资源。
      自从:
      1.5
      参见:
    • name

      protected String  name
      传递给构造函数的此 Font 的逻辑名称。
      自从:
      1.0
      参见:
    • style

      protected int style
      传递给构造函数的 Font 的样式。这种样式可以是 PLAIN、BOLD、ITALIC 或 BOLD+ITALIC。
      自从:
      1.0
      参见:
    • size

      protected int size
      Font 的磅值,四舍五入为整数。
      自从:
      1.0
      参见:
    • pointSize

      protected float pointSize
      Fontfloat 中的磅值。
      参见:
    • LAYOUT_LEFT_TO_RIGHT

      public static final int LAYOUT_LEFT_TO_RIGHT
      layoutGlyphVector 的标志,指示文本是从左到右的,由 Bidi 分析确定。
      参见:
    • LAYOUT_RIGHT_TO_LEFT

      public static final int LAYOUT_RIGHT_TO_LEFT
      layoutGlyphVector 的标志,指示文本是从右到左的,由 Bidi 分析确定。
      参见:
    • LAYOUT_NO_START_CONTEXT

      public static final int LAYOUT_NO_START_CONTEXT
      layoutGlyphVector 的标志,指示不应检查指定开始之前的字符数组中的文本。
      参见:
    • LAYOUT_NO_LIMIT_CONTEXT

      public static final int LAYOUT_NO_LIMIT_CONTEXT
      layoutGlyphVector 的标志,指示不应检查指定限制之后的 char 数组中的文本。
      参见:
  • 构造方法详细信息

    • Font

      public Font(String  name, int style, int size)
      根据指定的名称、样式和磅值创建一个新的 Font

      字体名称可以是字体名称或字体系列名称。它与样式一起使用以找到合适的字体。指定字体系列名称时,样式参数用于从系列中选择最合适的字体。指定字体名称时,将合并字体的样式和样式参数以从同一系列中找到最匹配的字体。例如,如果使用样式 Font.ITALIC 指定字体名称“Arial Bold”,则字体系统会在“Arial”系列中查找粗体和斜体的字体,并且可能会将字体实例与物理字体“Arial Bold Italic”相关联.样式参数与指定面的样式合并,而不是添加或减去。这意味着,指定粗体和粗体样式不会使字体加粗,指定粗体和普通样式不会使字体变亮。

      如果找不到所请求样式的字体,字体系统可以应用算法样式来实现所需样式。例如,如果请求 ITALIC,但没有可用的斜体字形,则普通字形中的字形可能会在算法上倾斜(倾斜)。

      字体名称查找不区分大小写,使用美国locale的大小写折叠规则。

      如果 name 参数表示逻辑字体以外的其他内容,即被解释为物理字体或系列,并且无法通过实现将其映射到物理字体或兼容的替代字体,则字体系统会将 Font 实例映射到“Dialog”,例如,getFamily 报告的系列将是“Dialog”。

      参数:
      name - 字体名称。这可以是字体名称或字体系列名称,并且可以表示在此 GraphicsEnvironment 中找到的逻辑字体或物理字体。逻辑字体的系列名称是:Dialog、DialogInput、Monospaced、Serif 或 SansSerif。所有这些名称都存在预定义的字符串常量,例如 DIALOG 。如果 namenull ,则 getName() 返回的新 Fontlogical font name 设置为名称“默认”。
      style - Font 的样式常量样式参数是一个整数位掩码,可以是 PLAINBOLD 和/或 ITALIC 的按位并集(例如,ITALICBOLD|ITALIC )。如果样式参数不符合预期的整数位掩码之一,则样式设置为 PLAIN
      size - Font 的磅值
      自从:
      1.0
      参见:
    • Font

      public Font(Map <? extends AttributedCharacterIterator.Attribute ,?> attributes)
      创建具有指定属性的新 Font。仅识别TextAttribute 中定义的键。此外,此构造函数无法识别 FONT 属性(请参阅 getAvailableAttributes() )。只有具有有效类型值的属性才会影响新的 Font

      如果 attributesnull ,则使用默认值初始化新的 Font

      参数:
      attributes - 分配给新的 Fontnull 的属性
      参见:
    • Font

      protected Font(Font  font)
      从指定的 font 创建一个新的 Font 。此构造函数旨在供子类使用。
      参数:
      font - 从中创建这个 Font
      抛出:
      NullPointerException - 如果 font 为空
      自从:
      1.6
  • 方法详情

    • textRequiresLayout

      public static boolean textRequiresLayout(char[] chars, int start, int end)
      如果指定文本的任何部分来自复杂脚本,则在使用 drawString(String,int,int) 和其他文本呈现方法时,实现需要调用布局处理才能正确呈现,则返回 true。文本的测量可能同样需要相同的额外处理。提供了 startend 索引,以便应用程序可以请求仅考虑文本的一个子集。最后检查的 char 索引位于 "end-1" ,即检查整个数组的请求将是
       Font.textRequiresLayout(chars, 0, chars.length); 
       
      应用程序可能会发现此信息对性能敏感代码很有帮助。

      请注意,即使此方法返回 false ,在与任何 Font 一起使用时仍可能调用布局处理,其中 hasLayoutAttributes() 返回 true ,因此需要针对特定字体咨询该方法,以获得说明此类字体的答案属性。

      参数:
      chars - 正文。
      start - 要检查的第一个字符的索引。
      end - 结束索引,独占。
      返回:
      true 如果指定文本需要特殊布局。
      抛出:
      NullPointerException - 如果 chars 为空。
      ArrayIndexOutOfBoundsException - 如果 start 为负数或 end 大于 chars 数组的长度。
      自从:
      9
    • getFont

      public static Font  getFont(Map <? extends AttributedCharacterIterator.Attribute ,?> attributes)
      返回适合属性的 Font。如果 attributes 包含一个 FONT 属性并将有效的 Font 作为其值,它将与任何剩余属性合并。有关详细信息,请参阅 TextAttribute.FONT
      参数:
      attributes - 分配给新的 Font 的属性
      返回:
      使用指定属性创建的新 Font
      抛出:
      NullPointerException - 如果 attributes 为空。
      自从:
      1.2
      参见:
    • createFonts

      public static Font [] createFonts(InputStream  fontStream) throws FontFormatException , IOException
      返回从指定流解码的新数组 Font。返回的 Font[] 将至少有一个元素。

      createFont(int, InputStream) 方法的这种变体的明确目的是支持表示 TrueType/OpenType 字体集合的字体源,并能够返回该集合中的所有单个字体。因此,如果数据源不包含至少一种 TrueType/OpenType 字体,此方法将抛出 FontFormatException。如果集合中的任何字体不包含所需的字体表,也会抛出相同的异常。

      “至少一个”条件允许流表示单个 OpenType/TrueType 字体。也就是说,它不一定是一个集合。返回数组的每个 Font 元素都是用 1 点大小和 PLAIN 样式创建的。然后可以将此基本字体与此类中的 deriveFont 方法一起使用,以派生具有不同大小、样式、转换和字体特征的新 Font 对象。

      此方法不会关闭 InputStream

      要使每个 Font 可用于 Font 构造函数,必须通过调用 registerFont(Font) GraphicsEnvironment 中注册它。

      参数:
      fontStream - 一个 InputStream 对象,表示字体或字体集合的输入数据。
      返回:
      一个新的Font[]
      抛出:
      FontFormatException - 如果 fontStream 数据不包含集合中任何元素所需的字体表,或者它根本不包含任何字体。
      IOException - 如果无法完全读取 fontStream
      自从:
      9
      参见:
    • createFonts

      public static Font [] createFonts(File  fontFile) throws FontFormatException , IOException
      返回从指定文件解码的新数组 Font。返回的 Font[] 将至少有一个元素。

      createFont(int, File) 方法的这种变体的明确目的是支持表示 TrueType/OpenType 字体集合的字体源,并能够返回该集合中的所有单独字体。因此,如果数据源不包含至少一种 TrueType/OpenType 字体,此方法将抛出 FontFormatException。如果集合中的任何字体不包含所需的字体表,也会抛出相同的异常。

      “至少一个”条件允许流表示单个 OpenType/TrueType 字体。也就是说,它不一定是一个集合。返回数组的每个 Font 元素都是用 1 点大小和 PLAIN 样式创建的。然后可以将此基本字体与此类中的 deriveFont 方法一起使用,以派生具有不同大小、样式、转换和字体特征的新 Font 对象。

      要使每个 Font 可用于 Font 构造函数,必须通过调用 registerFont(Font) GraphicsEnvironment 中注册它。

      参数:
      fontFile - 一个 File 对象,包含字体或字体集合的输入数据。
      返回:
      一个新的Font[]
      抛出:
      FontFormatException - 如果 File 不包含任何集合元素所需的字体表,或者它根本不包含任何字体。
      IOException - 如果无法读取 fontFile
      自从:
      9
      参见:
    • createFont

      public static Font  createFont(int fontFormat, InputStream  fontStream) throws FontFormatException , IOException
      使用指定的字体类型和输入数据返回一个新的 Font。新创建的 Font 点大小为 1,样式为 PLAIN 。然后可以将此基本字体与此类中的 deriveFont 方法一起使用,以派生具有不同大小、样式、转换和字体特征的新 Font 对象。此方法不会关闭 InputStream

      为了使 Font 可用于字体构造函数,返回的 Font 必须通过调用 registerFont(Font) GraphicsEnvironment 中注册。

      参数:
      fontFormat - Font 的类型,如果指定了 TrueType 资源,则为 TRUETYPE_FONT 。或者 TYPE1_FONT 如果指定了 Type 1 资源。
      fontStream - 代表字体输入数据的 InputStream 对象。
      返回:
      使用指定字体类型创建的新 Font
      抛出:
      IllegalArgumentException - 如果 fontFormat 不是 TRUETYPE_FONTTYPE1_FONT
      FontFormatException - 如果 fontStream 数据不包含指定格式所需的字体表。
      IOException - 如果无法完全读取 fontStream
      自从:
      1.3
      参见:
    • createFont

      public static Font  createFont(int fontFormat, File  fontFile) throws FontFormatException , IOException
      使用指定的字体类型和指定的字体文件返回一个新的 Font。新创建的 Font 点大小为 1,样式为 PLAIN 。然后可以将此基本字体与此类中的 deriveFont 方法一起使用,以派生具有不同大小、样式、转换和字体特征的新 Font 对象。
      参数:
      fontFormat - Font 的类型,如果指定了 TrueType 资源,则为 TRUETYPE_FONT ;如果指定了 Type 1 资源,则为 TYPE1_FONT 。只要返回的字体或其派生字体被引用,实现就可以继续访问fontFile以检索字体数据。因此,如果文件被更改或变得不可访问,结果是未定义的。

      为了使 Font 可用于字体构造函数,返回的 Font 必须通过调用 registerFont(Font) GraphicsEnvironment 中注册。

      fontFile - 代表字体输入数据的 File 对象。
      返回:
      使用指定字体类型创建的新 Font
      抛出:
      IllegalArgumentException - 如果 fontFormat 不是 TRUETYPE_FONTTYPE1_FONT
      NullPointerException - 如果 fontFile 为空。
      IOException - 如果无法读取 fontFile
      FontFormatException - 如果 fontFile 不包含指定格式所需的字体表。
      SecurityException - 如果执行代码没有读取文件的权限。
      自从:
      1.5
      参见:
    • getTransform

      public AffineTransform  getTransform()
      返回与此 Font 关联的转换副本。此转换不一定是用于构建字体的转换。如果字体有算法上标或宽度调整,这将被合并到返回的 AffineTransform 中。

      通常,不会转换字体。客户端一般应先调用isTransformed() ,只有在isTransformed返回true时才调用此方法。

      返回:
      表示此 Font 对象的转换属性的 AffineTransform 对象。
    • getFamily

      public String  getFamily()
      返回此 Font 的姓氏。

      字体的系列名称是特定于字体的。 Helvetica Italic 和 Helvetica Bold 等两种字体具有相同的家族名称,黑体字,而他们的字体名称是Helvetica 粗体Helvetica 斜体.可以使用 GraphicsEnvironment.getAvailableFontFamilyNames() 方法获取可用姓氏列表。

      使用 getName 获取字体的逻辑名称。使用 getFontName 获取字体的字体名称。

      返回:
      String 是这个 Font 的姓氏。
      自从:
      1.1
      参见:
    • getFamily

      public String  getFamily(Locale  l)
      返回此 Font 的姓氏,针对指定的locale进行了本地化。

      字体的系列名称是特定于字体的。 Helvetica Italic 和 Helvetica Bold 等两种字体具有相同的家族名称,黑体字,而他们的字体名称是Helvetica 粗体Helvetica 斜体.可以使用 GraphicsEnvironment.getAvailableFontFamilyNames() 方法获取可用姓氏列表。

      使用 getFontName 获取字体的字体名称。

      参数:
      l - 获取姓氏的locale
      返回:
      一个 String 表示字体的系列名称,针对指定的locale进行了本地化。
      自从:
      1.2
      参见:
    • getPSName

      public String  getPSName()
      返回此 Font 的后记名称。使用 getFamily 获取字体的系列名称。使用 getFontName 获取字体的字体名称。
      返回:
      一个 String 代表这个 Font 的后记名称。
      自从:
      1.2
    • getName

      public String  getName()
      返回此 Font 的逻辑名称。使用 getFamily 获取字体的系列名称。使用 getFontName 获取字体的字体名称。
      返回:
      一个 String 表示这个 Font 的逻辑名称。
      自从:
      1.0
      参见:
    • getFontName

      public String  getFontName()
      返回此 Font 的字体名称。例如,Helvetica Bold 可以作为字体名称返回。使用 getFamily 获取字体的系列名称。使用 getName 获取字体的逻辑名称。
      返回:
      一个 String 表示这个 Font 的字体名称。
      自从:
      1.2
      参见:
    • getFontName

      public String  getFontName(Locale  l)
      返回 Font 的字体名称,针对指定区域进行了本地化。例如,Helvetica Fett 可以作为字体名称返回。使用 getFamily 获取字体的系列名称。
      参数:
      l - 获取字体名称的locale
      返回:
      一个 String 表示字体名称,针对指定的locale进行了本地化。
      参见:
    • getStyle

      public int getStyle()
      返回此 Font 的样式。样式可以是 PLAIN、BOLD、ITALIC 或 BOLD+ITALIC。
      返回:
      这个Font的风格
      自从:
      1.0
      参见:
    • getSize

      public int getSize()
      返回此 Font 的点大小,四舍五入为整数。大多数用户都熟悉使用的想法磅值指定字体中字形的大小。此磅值定义单行距文本文档中一行基线与下一行基线之间的度量。点的大小是基于印刷点,大约 1/72 英寸。

      Java(tm)2D API 在用户坐标中采用一个点等于一个单位的约定。当使用标准化变换将用户空间坐标转换为设备空间坐标时,72 个用户空间单位等于设备空间中的 1 英寸。在这种情况下,一点是 1/72 英寸。

      返回:
      这个 Font 的磅值以 1/72 英寸为单位。
      自从:
      1.0
      参见:
    • getSize2D

      public float getSize2D()
      返回此 Fontfloat 值中的点大小。
      返回:
      Font 的磅值作为 float 值。
      自从:
      1.2
      参见:
    • isPlain

      public boolean isPlain()
      指示此 Font 对象的样式是否为 PLAIN。
      返回:
      true 如果此 Font 具有 PLAIN 样式; false否则。
      自从:
      1.0
      参见:
    • isBold

      public boolean isBold()
      指示此 Font 对象的样式是否为粗体。
      返回:
      true 如果此 Font 对象的样式为粗体; false否则。
      自从:
      1.0
      参见:
    • isItalic

      public boolean isItalic()
      指示此 Font 对象的样式是否为 ITALIC。
      返回:
      true 如果这个 Font 对象的样式是斜体; false否则。
      自从:
      1.0
      参见:
    • isTransformed

      public boolean isTransformed()
      指示此 Font 对象是否具有影响其大小的变换以及 Size 属性。
      返回:
      true 如果此 Font 对象具有非身份 AffineTransform 属性。 false否则。
      自从:
      1.4
      参见:
    • hasLayoutAttributes

      public boolean hasLayoutAttributes()
      如果此 Font 包含需要额外布局处理的属性,则返回 true。
      返回:
      如果字体具有布局属性,则为真
      自从:
      1.6
    • getFont

      public static Font  getFont(String  nm)
      从系统属性列表中返回一个 Font 对象。 nm 被视为要获取的系统属性的名称。然后根据 Font.decode(String) 的规范将此属性的 String 值解释为 Font 对象。如果未找到指定的属性,或者执行代码没有读取该属性的权限,则返回 null。
      参数:
      nm - 属性名称
      返回:
      属性名称描述的 Font 对象,如果不存在此类属性,则为 null。
      抛出:
      NullPointerException - 如果 nm 为空。
      自从:
      1.2
      参见:
    • decode

      public static Font  decode(String  str)
      返回 str 参数描述的 Font。为确保此方法返回所需的字体,请使用以下方式之一格式化 str 参数
      • fontname-style-pointsize
      • fontname-pointsize
      • fontname-style
      • fontname
      • fontname style pointsize
      • fontname pointsize
      • fontname style
      • fontname
      其中style是四个不区分大小写的字符串之一:"PLAIN""BOLD""BOLDITALIC""ITALIC",pointsize 是点大小的正十进制整数表示形式。例如,如果您想要字体为 Arial、粗体、点大小为 18,则可以使用“Arial-BOLD-18”调用此方法。这等效于调用 Font 构造函数:new Font("Arial", Font.BOLD, 18); 并且值被解释为该构造函数指定的值。

      有效的尾随小数字段始终被解释为点数。因此,不应在 fontname only 形式中使用包含尾随十进制值的 fontname。

      如果样式名称字段不是有效样式字符串之一,则将其解释为字体名称的一部分,并使用默认样式。

      只能使用 ' ' 或 '-' 之一来分隔输入中的字段。标识的分隔符是最接近字符串末尾的分隔符,它将有效磅值或有效样式名称与字符串的其余部分分开。 Null(空)pointsize 和 style 字段被视为具有该字段默认值的有效字段。

      某些字体名称可能包含分隔符“”或“-”。如果 str 不是由 3 个组件组成的,例如 stylepointsize 字段不存在于 str 中,并且 fontname 还包含一个被确定为分隔符的字符,那么这些字符可能是 fontname 的一部分解释为分隔符,因此可能无法正确识别字体名称。

      默认大小为 12,默认样式为 PLAIN。如果 str 未指定有效大小,则返回的 Font 的大小为 12。如果 str 未指定有效的样式,则返回的 Font 的样式为 PLAIN。如果您没有在 str 参数中指定有效的字体名称,则此方法将返回具有系列名称“Dialog”的字体。要确定系统上可用的字体系列名称,请使用 GraphicsEnvironment.getAvailableFontFamilyNames() 方法。如果 strnull ,则返回一个新的 Font,其姓氏为“Dialog”,大小为 12,样式为 PLAIN。

      参数:
      str - 字体名称,或 null
      返回:
      str 描述的 Font 对象,或者如果 strnull 则新的默认 Font
      自从:
      1.1
      参见:
    • getFont

      public static Font  getFont(String  nm, Font  font)
      从系统属性列表中获取指定的 Font。与 SystemgetProperty 方法一样,第一个参数被视为要获取的系统属性的名称。此属性的 String 值然后被解释为 Font 对象。

      属性值应该是 Font.decode(String) 接受的形式之一。如果未找到指定的属性,或者执行代码没有读取该属性的权限,则返回 font 参数。

      参数:
      nm - 不区分大小写的属性名称
      font - 如果未定义属性 nm,则返回默认值 Font
      返回:
      属性的 Font 值。
      抛出:
      NullPointerException - 如果 nm 为空。
      参见:
    • hashCode

      public int hashCode()
      返回此 Font 的哈希码。
      重写:
      hashCode 在类 Object
      返回:
      这个 Font 的哈希码值。
      自从:
      1.0
      参见:
    • equals

      public boolean equals(Object  obj)
      将此 Font 对象与指定的 Object 进行比较。
      重写:
      equals 在类 Object
      参数:
      obj - 要比较的 Object
      返回:
      true 如果对象相同,或者参数是一个 Font 对象,描述与该对象相同的字体; false否则。
      自从:
      1.0
      参见:
    • toString

      public String  toString()
      将此 Font 对象转换为 String 表示。
      重写:
      toString 在类 Object
      返回:
      Font 对象的 String 表示。
      自从:
      1.0
    • getNumGlyphs

      public int getNumGlyphs()
      返回此 Font 中的字形数。这个 Font 的字形代码范围从 0 到 getNumGlyphs() - 1。
      返回:
      Font 中的字形数量。
      自从:
      1.2
    • getMissingGlyphCode

      public int getMissingGlyphCode()
      返回当此 Font 没有指定 unicode 代码点的字形时使用的字形代码。
      返回:
      这个 Font 的字形代码。
      自从:
      1.2
    • getBaselineFor

      public byte getBaselineFor(char c)
      返回适合显示此字符的基线。

      大字体可以支持不同的书写系统,每个系统可以使用不同的基线。字符参数确定要使用的书写系统。客户不应假设所有角色都使用相同的基线。

      参数:
      c - 用于识别书写系统的字符
      返回:
      适用于指定字符的基线。
      自从:
      1.2
      参见:
    • getAttributes

      public Map <TextAttribute ,?> getAttributes()
      返回此 Font 中可用的字体属性映射。属性包括诸如连字和字形替换之类的东西。
      返回:
      这个 Font 的属性图。
    • getAvailableAttributes

      public AttributedCharacterIterator.Attribute [] getAvailableAttributes()
      返回此 Font 支持的所有属性的键。这些属性可用于派生其他字体。
      返回:
      包含此 Font 支持的所有属性的键的数组。
      自从:
      1.2
    • deriveFont

      public Font  deriveFont(int style, float size)
      通过复制此 Font 对象并应用新的样式和大小来创建新的 Font 对象。
      参数:
      style - 新 Font 的风格
      size - 新 Font 的尺寸
      返回:
      一个新的 Font 对象。
      自从:
      1.2
    • deriveFont

      public Font  deriveFont(int style, AffineTransform  trans)
      通过复制此 Font 对象并应用新样式和转换来创建新的 Font 对象。
      参数:
      style - 新 Font 的风格
      trans - 与新的 Font 关联的 AffineTransform
      返回:
      一个新的 Font 对象。
      抛出:
      IllegalArgumentException - 如果 transnull
      自从:
      1.2
    • deriveFont

      public Font  deriveFont(float size)
      通过复制当前 Font 对象并为其应用新大小来创建新的 Font 对象。
      参数:
      size - 新 Font 的尺寸。
      返回:
      一个新的 Font 对象。
      自从:
      1.2
    • deriveFont

      public Font  deriveFont(AffineTransform  trans)
      通过复制当前的 Font 对象并对其应用新的转换来创建新的 Font 对象。
      参数:
      trans - 与新的 Font 关联的 AffineTransform
      返回:
      一个新的 Font 对象。
      抛出:
      IllegalArgumentException - 如果 transnull
      自从:
      1.2
    • deriveFont

      public Font  deriveFont(int style)
      通过复制当前 Font 对象并对其应用新样式来创建新的 Font 对象。
      参数:
      style - 新 Font 的风格
      返回:
      一个新的 Font 对象。
      自从:
      1.2
    • deriveFont

      public Font  deriveFont(Map <? extends AttributedCharacterIterator.Attribute ,?> attributes)
      通过复制当前的 Font 对象并为其应用一组新的字体属性来创建一个新的 Font 对象。
      参数:
      attributes - 为新的 Font 启用的属性映射
      返回:
      一个新的 Font 对象。
      自从:
      1.2
    • canDisplay

      public boolean canDisplay(char c)
      检查此 Font 是否具有指定字符的字形。

      笔记:此方法无法处理 补充字符 。要支持所有 Unicode 字符,包括增补字符,请使用 canDisplay(int) 方法或 canDisplayUpTo 方法。

      参数:
      c - 需要字形的字符
      返回:
      true 如果这个 Font 有这个字符的字形; false否则。
      自从:
      1.2
    • canDisplay

      public boolean canDisplay(int codePoint)
      检查此 Font 是否具有指定字符的字形。
      参数:
      codePoint - 需要字形的字符(Unicode 代码点)。
      返回:
      true 如果这个 Font 有字符的字形; false否则。
      抛出:
      IllegalArgumentException - 如果代码点不是有效的 Unicode 代码点。
      自从:
      1.5
      参见:
    • canDisplayUpTo

      public int canDisplayUpTo(String  str)
      指示此 Font 是否可以显示指定的 String 。对于使用 Unicode 编码的字符串,了解特定字体是否可以显示该字符串很重要。此方法返回 String str 的偏移量,这是 Font 在不使用缺失字形代码的情况下无法显示的第一个字符。如果Font可以显示所有字符,则返回-1。
      参数:
      str - 一个 String 对象
      返回:
      str 的偏移量指向 str 中的第一个字符,该 Font 无法显示;或 -1 如果此 Font 可以显示 str 中的所有字符。
      自从:
      1.2
    • canDisplayUpTo

      public int canDisplayUpTo(char[] text, int start, int limit)
      指示此 Font 是否可以显示指定 text 中从 start 开始到 limit 结束的字符。这个方法是一个方便的重载。
      参数:
      text - 指定的 char 值数组
      start - 指定的起始偏移量(在 char s 中)到指定的 char 值数组
      limit - 指定的结束偏移量(在 char s 中)到指定的 char 值数组
      返回:
      text 的偏移量指向 text 中的第一个字符,该 Font 无法显示;或者 -1 如果这个 Font 可以显示 text 中的所有字符。
      自从:
      1.2
    • canDisplayUpTo

      public int canDisplayUpTo(CharacterIterator  iter, int start, int limit)
      指示此 Font 是否可以显示由 iter 指定的文本,从 start 开始到 limit 结束。
      参数:
      iter - 一个 CharacterIterator 对象
      start - 指定的起始偏移量到指定的 CharacterIterator
      limit - 指定的结束偏移到指定的 CharacterIterator 中。
      返回:
      iter 的偏移量指向 iter 中的第一个字符,该 Font 无法显示;或 -1 如果此 Font 可以显示 iter 中的所有字符。
      自从:
      1.2
    • getItalicAngle

      public float getItalicAngle()
      返回此 Font 的斜体角度。斜体角是插入符的反斜率,它最符合这个 Font 的姿势。
      返回:
      这个 Font 的 ITALIC 样式的角度。
      参见:
    • hasUniformLineMetrics

      public boolean hasUniformLineMetrics()
      检查此 Font 是否具有统一的线度量。逻辑Font 可能是复合字体,这意味着它由不同的物理字体组成以覆盖不同的代码范围。这些字体中的每一种都可能有不同的 LineMetrics 。如果逻辑 Font 是单一字体,那么指标将是统一的。
      返回:
      true 如果此 Font 具有统一的线度量; false否则。
    • getLineMetrics

      public LineMetrics  getLineMetrics(String  str, FontRenderContext  frc)
      返回使用指定的 StringFontRenderContext 创建的 LineMetrics 对象。
      参数:
      str - 指定的 String
      frc - 指定的 FontRenderContext
      返回:
      使用指定的 StringFontRenderContext 创建的 LineMetrics 对象。
    • getLineMetrics

      public LineMetrics  getLineMetrics(String  str, int beginIndex, int limit, FontRenderContext  frc)
      返回使用指定参数创建的 LineMetrics 对象。
      参数:
      str - 指定的 String
      beginIndex - str 的初始偏移量
      limit - str 的结束偏移量
      frc - 指定的 FontRenderContext
      返回:
      使用指定参数创建的 LineMetrics 对象。
    • getLineMetrics

      public LineMetrics  getLineMetrics(char[] chars, int beginIndex, int limit, FontRenderContext  frc)
      返回使用指定参数创建的 LineMetrics 对象。
      参数:
      chars - 字符数组
      beginIndex - chars 的初始偏移量
      limit - chars 的结束偏移量
      frc - 指定的 FontRenderContext
      返回:
      使用指定参数创建的 LineMetrics 对象。
    • getLineMetrics

      public LineMetrics  getLineMetrics(CharacterIterator  ci, int beginIndex, int limit, FontRenderContext  frc)
      返回使用指定参数创建的 LineMetrics 对象。
      参数:
      ci - 指定的 CharacterIterator
      beginIndex - ci 中的初始偏移量
      limit - ci 的结束偏移量
      frc - 指定的 FontRenderContext
      返回:
      使用指定参数创建的 LineMetrics 对象。
    • getStringBounds

      public Rectangle2D  getStringBounds(String  str, FontRenderContext  frc)
      返回指定 FontRenderContext 中指定 String 的逻辑边界。逻辑边界包含原点、上升、前进和高度,其中包括前导。逻辑边界并不总是包含所有文本。例如,在某些语言和某些字体中,重音符号可以位于上升线上方或下降线下方。要获得包含所有文本的视觉边界框,请使用 TextLayoutgetBounds 方法。

      注意:返回的边界在基线相对坐标中(参见 class notes )。

      参数:
      str - 指定的 String
      frc - 指定的 FontRenderContext
      返回:
      Rectangle2D 是指定 FontRenderContext 中指定 String 的边界框。
      自从:
      1.2
      参见:
    • getStringBounds

      public Rectangle2D  getStringBounds(String  str, int beginIndex, int limit, FontRenderContext  frc)
      返回指定 FontRenderContext 中指定 String 的逻辑边界。逻辑边界包含原点、上升、前进和高度,其中包括前导。逻辑边界并不总是包含所有文本。例如,在某些语言和某些字体中,重音符号可以位于上升线上方或下降线下方。要获得包含所有文本的视觉边界框,请使用 TextLayoutgetBounds 方法。

      注意:返回的边界在基线相对坐标中(参见 class notes )。

      参数:
      str - 指定的 String
      beginIndex - str 的初始偏移量
      limit - str 的结束偏移量
      frc - 指定的 FontRenderContext
      返回:
      一个 Rectangle2D 是指定 FontRenderContext 中指定 String 的边界框。
      抛出:
      IndexOutOfBoundsException - 如果 beginIndex 小于零,或者 limit 大于 str 的长度,或者 beginIndex 大于 limit
      自从:
      1.2
      参见:
    • getStringBounds

      public Rectangle2D  getStringBounds(char[] chars, int beginIndex, int limit, FontRenderContext  frc)
      返回指定 FontRenderContext 中指定字符数组的逻辑边界。逻辑边界包含原点、上升、前进和高度,其中包括前导。逻辑边界并不总是包含所有文本。例如,在某些语言和某些字体中,重音符号可以位于上升线上方或下降线下方。要获得包含所有文本的视觉边界框,请使用 TextLayoutgetBounds 方法。

      注意:返回的边界在基线相对坐标中(参见 class notes )。

      参数:
      chars - 字符数组
      beginIndex - 字符数组中的初始偏移量
      limit - 字符数组中的结束偏移量
      frc - 指定的 FontRenderContext
      返回:
      Rectangle2D 是指定 FontRenderContext 中指定字符数组的边界框。
      抛出:
      IndexOutOfBoundsException - 如果 beginIndex 小于零,或者 limit 大于 chars 的长度,或者 beginIndex 大于 limit
      自从:
      1.2
      参见:
    • getStringBounds

      public Rectangle2D  getStringBounds(CharacterIterator  ci, int beginIndex, int limit, FontRenderContext  frc)
      返回指定 FontRenderContext 中指定 CharacterIterator 中索引的字符的逻辑边界。逻辑边界包含原点、上升、前进和高度,其中包括前导。逻辑边界并不总是包含所有文本。例如,在某些语言和某些字体中,重音符号可以位于上升线上方或下降线下方。要获得包含所有文本的视觉边界框,请使用 TextLayoutgetBounds 方法。

      注意:返回的边界在基线相对坐标中(参见 class notes )。

      参数:
      ci - 指定的 CharacterIterator
      beginIndex - ci 中的初始偏移量
      limit - ci 中的结束偏移量
      frc - 指定的 FontRenderContext
      返回:
      一个 Rectangle2D 是在指定的 FontRenderContext 中指定的 CharacterIterator 中索引的字符的边界框。
      抛出:
      IndexOutOfBoundsException - 如果 beginIndex 小于 ci 的起始索引,或者 limit 大于 ci 的结束索引,或者 beginIndex 大于 limit
      自从:
      1.2
      参见:
    • getMaxCharBounds

      public Rectangle2D  getMaxCharBounds(FontRenderContext  frc)
      返回具有指定 FontRenderContext 中定义的最大边界的字符的边界。

      注意:返回的边界在基线相对坐标中(参见 class notes )。

      参数:
      frc - 指定的 FontRenderContext
      返回:
      Rectangle2D 是具有最大边界的字符的边界框。
    • createGlyphVector

      public GlyphVector  createGlyphVector(FontRenderContext  frc, String  str)
      根据此 Font 中的 Unicode cmap,通过将字符一对一映射到字形来创建 GlyphVector 。除了将字形映射到字符之外,此方法不执行其他处理。这意味着此方法对某些需要重新排序、整形或连字替换的脚本(例如阿拉伯语、希伯来语、泰语和印度语)没有用。
      参数:
      frc - 指定的 FontRenderContext
      str - 指定的 String
      返回:
      使用指定的 String 和指定的 FontRenderContext 创建的新 GlyphVector
    • createGlyphVector

      public GlyphVector  createGlyphVector(FontRenderContext  frc, char[] chars)
      根据此 Font 中的 Unicode cmap,通过将字符一对一映射到字形来创建 GlyphVector 。除了将字形映射到字符之外,此方法不执行其他处理。这意味着此方法对某些需要重新排序、整形或连字替换的脚本(例如阿拉伯语、希伯来语、泰语和印度语)没有用。
      参数:
      frc - 指定的 FontRenderContext
      chars - 指定的字符数组
      返回:
      使用指定的字符数组和指定的 FontRenderContext 创建的新 GlyphVector
    • createGlyphVector

      public GlyphVector  createGlyphVector(FontRenderContext  frc, CharacterIterator  ci)
      根据此 Font 中的 Unicode cmap,通过将指定字符一对一映射到字形来创建 GlyphVector 。除了将字形映射到字符之外,此方法不执行其他处理。这意味着此方法对某些需要重新排序、整形或连字替换的脚本(例如阿拉伯语、希伯来语、泰语和印度语)没有用。
      参数:
      frc - 指定的 FontRenderContext
      ci - 指定的 CharacterIterator
      返回:
      使用指定的 CharacterIterator 和指定的 FontRenderContext 创建的新 GlyphVector
    • createGlyphVector

      public GlyphVector  createGlyphVector(FontRenderContext  frc, int[] glyphCodes)
      根据此 Font 中的 Unicode cmap,通过将字符一对一映射到字形来创建 GlyphVector 。除了将字形映射到字符之外,此方法不执行其他处理。这意味着此方法对某些需要重新排序、整形或连字替换的脚本(例如阿拉伯语、希伯来语、泰语和印度语)没有用。
      参数:
      frc - 指定的 FontRenderContext
      glyphCodes - 指定的整数数组
      返回:
      使用指定的整数数组和指定的 FontRenderContext 创建的新 GlyphVector
    • layoutGlyphVector

      public GlyphVector  layoutGlyphVector(FontRenderContext  frc, char[] text, int start, int limit, int flags)
      返回一个新的 GlyphVector 对象,如果可能的话执行文本的完整布局。复杂文本需要完整布局,例如阿拉伯语或印地语。对不同脚本的支持取决于字体和实现。

      布局需要 bidi 分析,由 Bidi 执行,并且只应在具有统一方向的文本上执行。方向在标志参数中指示,通过使用 LAYOUT_RIGHT_TO_LEFT 指示从右到左(阿拉伯语和希伯来语)的运行方向,或使用 LAYOUT_LEFT_TO_RIGHT 指示从左到右(英语)的运行方向。

      此外,一些操作,如阿拉伯语整形,需要上下文,以便开始和限制处的字符可以具有适当的形状。有时缓冲区中超出提供范围的数据没有有效数据。可以将值 LAYOUT_NO_START_CONTEXT 和 LAYOUT_NO_LIMIT_CONTEXT 添加到 flags 参数以分别指示不应检查开始之前或限制之后的文本的上下文。

      flags 参数的所有其他值均保留。

      参数:
      frc - 指定的 FontRenderContext
      text - 要布局的文本
      start - 用于 GlyphVector 的文本的开头
      limit - 用于 GlyphVector 的文本限制
      flags - 如上所述的控制标志
      返回:
      一个新的 GlyphVector 表示开始和限制之间的文本,选择和定位字形以最好地表示文本
      抛出:
      ArrayIndexOutOfBoundsException - 如果开始或限制超出范围
      自从:
      1.4
      参见: