Module java.desktop
Package java.awt

Class Font

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

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

字符和字形

字符是表示字母、数字或标点等项目的符号。例如,'g',拉丁小写字母g,就是一个字符。

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

物理字体和逻辑字体

Java平台区分两种字体:物理字体和逻辑字体。

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

逻辑字体是Java平台定义的五个字体系列,任何Java运行时环境都必须支持:Serif、SansSerif、Monospaced、Dialog和DialogInput。这些逻辑字体不是实际的字体库。相反,逻辑字体名称由Java运行时环境映射到物理字体。映射是实现和通常是区域设置相关的,因此它们提供的外观和度量标准会有所变化。通常,每个逻辑字体名称映射到多个物理字体,以涵盖大范围的字符。

LabelTextField这样的对等AWT组件只能使用逻辑字体。

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

字体面和名称

一个Font可以有许多面,比如heavy、medium、oblique、gothic和regular。所有这些面都具有相似的印刷设计。

您可以从Font对象中获取三种不同的名称。逻辑字体名称只是用于构造字体的名称。字体面名称,或简称字体名称,是特定字体面的名称,比如Helvetica Bold。字体系列名称是确定跨多个面的印刷设计的字体系列的名称,比如Helvetica。

Font类表示来自主机系统资源中存在的一组字体面的实例。例如,Arial Bold和Courier Bold Italic是字体面。与字体面关联的可以有多个Font对象,每个对象在大小、样式、变换和字体特性上有所不同。

由于平台限制,例如缺少适合实现逻辑字体的平台字体,字形可能不会始终以请求的属性(例如字体和样式)呈现。

GraphicsEnvironment类的getAllFonts方法返回系统中所有可用字体面的数组。这些字体面作为具有大小为1、恒等变换和默认字体特性的Font对象返回。然后可以使用此类中的deriveFont方法从这些基本字体中派生具有不同大小、样式、变换和字体特性的新Font对象。

字体和TextAttribute

Font支持大多数TextAttribute。这使得一些操作,例如呈现下划线文本,更加方便,因为不需要显式构造TextLayout对象。可以通过使用TextAttribute值的Map构造或派生在Font上设置属性。

一些TextAttribute的值不可序列化,因此尝试序列化具有这些值的Font实例将不会序列化它们。这意味着从这样的流反序列化的Font将不等于包含不可序列化属性的原始Font。这很少会造成问题,因为这些属性通常仅在特殊情况下使用,不太可能被序列化。

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

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

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

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

注意:字体旋转可能导致文本基线被旋转。为了考虑这种(罕见的)可能性,字体API被指定为返回基于基线的坐标的度量,并接受“基于基线的坐标”的参数。这将'x'坐标映射到沿基线的前进,(正x是沿基线向前),将'y'坐标映射到基线垂直方向上'x'处的距离(正y是基线矢量的顺时针90度)。特别重要的API被称为具有“基于基线的坐标”。

参见:
  • Field Details

    • DIALOG

      public static final String DIALOG
      逻辑字体"Dialog"的规范字族名称的字符串常量。在字体构造中使用它可以提供名称的编译时验证。
      自从:
      1.6
      参见:
    • DIALOG_INPUT

      public static final String DIALOG_INPUT
      逻辑字体"DialogInput"的规范字族名称的字符串常量。在字体构造中使用它可以提供名称的编译时验证。
      自从:
      1.6
      参见:
    • SANS_SERIF

      public static final String SANS_SERIF
      逻辑字体"SansSerif"的规范字族名称的字符串常量。在字体构造中使用它可以提供名称的编译时验证。
      自从:
      1.6
      参见:
    • SERIF

      public static final String SERIF
      逻辑字体"Serif"的规范字族名称的字符串常量。在字体构造中使用它可以提供名称的编译时验证。
      自从:
      1.6
      参见:
    • MONOSPACED

      public static final String MONOSPACED
      逻辑字体"Monospaced"的规范字族名称的字符串常量。在字体构造中使用它可以提供名称的编译时验证。
      自从:
      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
      Identify a font resource of type TRUETYPE. Used to specify a TrueType font resource to the createFont(int, java.io.InputStream) method. The TrueType format was extended to become the OpenType format, which adds support for fonts with Postscript outlines, this tag therefore references these fonts, as well as those with TrueType outlines.
      Since:
      1.3
      See Also:
    • TYPE1_FONT

      public static final int TYPE1_FONT
      Identify a font resource of type TYPE1. Used to specify a Type1 font resource to the createFont(int, java.io.InputStream) method.
      Since:
      1.5
      See Also:
    • name

      protected String name
      The logical name of this Font, as passed to the constructor.
      Since:
      1.0
      See Also:
    • style

      protected int style
      The style of this Font, as passed to the constructor. This style can be PLAIN, BOLD, ITALIC, or BOLD+ITALIC.
      Since:
      1.0
      See Also:
    • size

      protected int size
      The point size of this Font, rounded to integer.
      Since:
      1.0
      See Also:
    • pointSize

      protected float pointSize
      The point size of this Font in float.
      See Also:
    • LAYOUT_LEFT_TO_RIGHT

      public static final int LAYOUT_LEFT_TO_RIGHT
      A flag to layoutGlyphVector indicating that text is left-to-right as determined by Bidi analysis.
      See Also:
    • LAYOUT_RIGHT_TO_LEFT

      public static final int LAYOUT_RIGHT_TO_LEFT
      A flag to layoutGlyphVector indicating that text is right-to-left as determined by Bidi analysis.
      See Also:
    • LAYOUT_NO_START_CONTEXT

      public static final int LAYOUT_NO_START_CONTEXT
      A flag to layoutGlyphVector indicating that text in the char array before the indicated start should not be examined.
      See Also:
    • LAYOUT_NO_LIMIT_CONTEXT

      public static final int LAYOUT_NO_LIMIT_CONTEXT
      A flag to layoutGlyphVector indicating that text in the char array after the indicated limit should not be examined.
      See Also:
  • Constructor Details

    • Font

      public Font(String name, int style, int size)
      Creates a new Font from the specified name, style and point size.

      The font name can be a font face name or a font family name. It is used together with the style to find an appropriate font face. When a font family name is specified, the style argument is used to select the most appropriate face from the family. When a font face name is specified, the face's style and the style argument are merged to locate the best matching font from the same family. For example if face name "Arial Bold" is specified with style Font.ITALIC, the font system looks for a face in the "Arial" family that is bold and italic, and may associate the font instance with the physical font face "Arial Bold Italic". The style argument is merged with the specified face's style, not added or subtracted. This means, specifying a bold face and a bold style does not double-embolden the font, and specifying a bold face and a plain style does not lighten the font.

      If no face for the requested style can be found, the font system may apply algorithmic styling to achieve the desired style. For example, if ITALIC is requested, but no italic face is available, glyphs from the plain face may be algorithmically obliqued (slanted).

      Font name lookup is case insensitive, using the case folding rules of the US locale.

      If the name parameter represents something other than a logical font, i.e. is interpreted as a physical font face or family, and this cannot be mapped by the implementation to a physical font or a compatible alternative, then the font system will map the Font instance to "Dialog", such that for example, the family as reported by getFamily will be "Dialog".

      Parameters:
      name - the font name. This can be a font face name or a font family name, and may represent either a logical font or a physical font found in this GraphicsEnvironment. The family names for logical fonts are: Dialog, DialogInput, Monospaced, Serif, or SansSerif. Pre-defined String constants exist for all of these names, for example, DIALOG. If name is null, the logical font name of the new Font as returned by getName() is set to the name "Default".
      style - the style constant for the Font The style argument is an integer bitmask that may be PLAIN, or a bitwise union of BOLD and/or ITALIC (for example, ITALIC or BOLD|ITALIC). If the style argument does not conform to one of the expected integer bitmasks then the style is set to PLAIN.
      size - the point size of the Font
      Since:
      1.0
      See Also:
    • Font

      public Font(Map<? extends AttributedCharacterIterator.Attribute,?> attributes)
      Creates a new Font with the specified attributes. Only keys defined in TextAttribute are recognized. In addition the FONT attribute is not recognized by this constructor (see getAvailableAttributes()). Only attributes that have values of valid types will affect the new Font.

      If attributes is null, a new Font is initialized with default values.

      Parameters:
      attributes - the attributes to assign to the new Font, or null
      See Also:
    • Font

      protected Font(Font font)
      Creates a new Font from the specified font. This constructor is intended for use by subclasses.
      Parameters:
      font - from which to create this Font.
      Throws:
      NullPointerException - if font is null
      Since:
      1.6
  • Method Details

    • textRequiresLayout

      public static boolean textRequiresLayout(char[] chars, int start, int end)
      Returns true if any part of the specified text is from a complex script for which the implementation will need to invoke layout processing in order to render correctly when using drawString(String,int,int) and other text rendering methods. Measurement of the text may similarly need the same extra processing. The start and end indices are provided so that the application can request only a subset of the text be considered. The last char index examined is at "end-1", i.e a request to examine the entire array would be
       Font.textRequiresLayout(chars, 0, chars.length);
       
      An application may find this information helpful in performance sensitive code.

      Note that even if this method returns false, layout processing may still be invoked when used with any Font for which hasLayoutAttributes() returns true, so that method will need to be consulted for the specific font, in order to obtain an answer which accounts for such font attributes.

      Parameters:
      chars - the text.
      start - the index of the first char to examine.
      end - the ending index, exclusive.
      Returns:
      true if the specified text will need special layout.
      Throws:
      NullPointerException - if chars is null.
      ArrayIndexOutOfBoundsException - if start is negative or end is greater than the length of the chars array.
      Since:
      9
    • getFont

      public static Font getFont(Map<? extends AttributedCharacterIterator.Attribute,?> attributes)
      Returns a Font appropriate to the attributes. If attributes contains a FONT attribute with a valid Font as its value, it will be merged with any remaining attributes. See TextAttribute.FONT for more information.
      Parameters:
      attributes - the attributes to assign to the new Font
      Returns:
      a new Font created with the specified attributes
      Throws:
      NullPointerException - if attributes is null.
      Since:
      1.2
      See Also:
    • 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可用于字体构造函数,必须通过调用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可用于字体构造函数,必须通过调用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可用于字体构造函数,必须通过调用registerFont(Font)将返回的Font注册到GraphicsEnvironment中。

      参数:
      fontFormat - Font的类型,如果指定了TrueType资源,则为TRUETYPE_FONT,如果指定了Type 1资源,则为TYPE1_FONT
      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可用于字体构造函数,必须通过调用registerFont(Font)将返回的Font注册到GraphicsEnvironment中。

      fontFile - 表示字体输入数据的File对象。
      返回:
      使用指定字体类型创建的新Font
      抛出:
      IllegalArgumentException - 如果fontFormat不是TRUETYPE_FONTTYPE1_FONT
      NullPointerException - 如果fontFile为null。
      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 BoldHelvetica Italic。可通过使用GraphicsEnvironment.getAvailableFontFamilyNames()方法获取可用的族名列表。

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

      返回:
      Font的族名的String
      自版本:
      1.1
      参见:
    • getFamily

      public String getFamily(Locale l)
      返回指定区域设置的Font的字体族名称。

      字体的族名称是特定于字体的。例如,Helvetica斜体和Helvetica粗体具有相同的族名称Helvetica,而它们的字体名称分别是Helvetica粗体Helvetica斜体。可通过使用GraphicsEnvironment.getAvailableFontFamilyNames()方法获取可用族名称列表。

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

      参数:
      l - 要获取族名称的区域设置
      返回:
      代表字体族名称的String,针对指定的区域设置进行本地化。
      自版本:
      1.2
      参见:
    • getPSName

      public String getPSName()
      返回此Font的PostScript名称。使用getFamily获取字体的族名称。使用getFontName获取字体的字体名称。
      返回:
      代表此Font的PostScript名称的String
      自版本:
      1.2
    • getName

      public String getName()
      返回此Font的逻辑名称。使用getFamily获取字体的族名称。使用getFontName获取字体的字体名称。
      返回:
      代表此Font的逻辑名称的String
      自版本:
      1.0
      参见:
    • getFontName

      public String getFontName()
      返回此Font的字体名称。例如,Helvetica粗体可能作为字体名称返回。使用getFamily获取字体的族名称。使用getName获取字体的逻辑名称。
      返回:
      代表此Font的字体名称的String
      自版本:
      1.2
      参见:
    • getFontName

      public String getFontName(Locale l)
      返回此Font的字体名称,针对指定的区域设置进行本地化。例如,Helvetica Fett可能作为字体名称返回。使用getFamily获取字体的族名称。
      参数:
      l - 要获取字体名称的区域设置
      返回:
      代表此Font的字体名称的String,针对指定的区域设置进行本地化。
      参见:
    • 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()
      返回此Font的点大小,以float值表示。
      返回:
      Font的点大小,作为float值表示。
      自版本:
      1.2
      参见:
    • isPlain

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

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

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

      public boolean isTransformed()
      指示此Font对象是否具有影响其大小的变换,除了Size属性之外。
      返回:
      如果此Font对象具有非恒等的AffineTransform属性,则返回true;否则返回false
      自版本:
      1.4
      参见:
    • hasLayoutAttributes

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

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

      public static Font decode(String str)
      返回描述str参数的Font。为确保此方法返回所需的Font,请以以下方式格式化str参数之一:
      • 字体名称-样式-字号
      • 字体名称-字号
      • 字体名称-样式
      • 字体名称
      • 字体名称 样式 字号
      • 字体名称 字号
      • 字体名称 样式
      • 字体名称
      其中样式是四个不区分大小写的字符串之一:"PLAIN""BOLD""BOLDITALIC""ITALIC",而字号是正的十进制整数表示的字号大小。例如,如果您想要一个Arial字体,加粗,字号为18,您将使用"Arial-BOLD-18"调用此方法。这相当于调用Font构造函数:new Font("Arial", Font.BOLD, 18);并且值按照该构造函数指定的方式进行解释。

      始终将有效的尾部十进制字段解释为字号。因此,不应在仅包含字体名称形式的字体名称中使用包含尾部十进制值的字体名称。

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

      在输入中只能使用一个空格或破折号来分隔字段。确定的分隔符是距离字符串末尾最近的分隔符,它将有效的字号或有效的样式名称与字符串的其余部分分隔开。空(空)字号和样式字段将被视为具有该字段的默认值的有效字段。

      某些字体名称可能包含分隔符字符空格或破折号。如果str未形成3个组件,例如stylepointsize字段未出现在str中,并且fontname还包含被确定为分隔符字符的字符,则这些字符(如果它们被视为是字体名称的一部分)可能会被解释为分隔符,因此可能无法正确识别字体名称。

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

      参数:
      str - 字体名称,或null
      返回:
      描述strFont对象,如果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 - 如果nmnull
      参见:
    • hashCode

      public int hashCode()
      返回此Font的哈希码。
      覆盖:
      hashCode 在类 Object
      返回:
      Font的哈希码值。
      自版本:
      1.0
      参见:
    • equals

      public boolean equals(Object obj)
      将此Font对象与指定的Object进行比较。
      覆盖:
      equals 在类 Object
      参数:
      obj - 要比较的Object
      返回:
      如果对象相同,或者参数是描述与此对象相同字体的Font对象,则返回true;否则返回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 - 需要字形的字符
      返回:
      如果此 Font 具有此字符的字形,则返回true; 否则返回false
      自版本:
      1.2
    • canDisplay

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

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

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

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

      public float getItalicAngle()
      返回此 Font 的斜体角度。斜体角度是最能匹配此 Font 姿势的插入符的倒数斜率。
      返回:
      Font 的ITALIC样式的角度。
      参见:
    • hasUniformLineMetrics

      public boolean hasUniformLineMetrics()
      检查此 Font 是否具有统一的行度量。逻辑 Font 可能是一个复合字体,这意味着它由不同的物理字体组成,以覆盖不同的代码范围。这些字体中的每一个可能具有不同的LineMetrics。如果逻辑 Font 是单个字体,则度量将是统一的。
      返回:
      如果此 Font 具有统一的行度量,则返回true; 否则返回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)
      返回指定String在指定FontRenderContext中的逻辑边界。逻辑边界包含原点、上升、前进和高度,其中包括行间距。逻辑边界并不总是包围所有文本。例如,在某些语言和某些字体中,重音符号可以位于上升线上方或下降线下方。要获取包围所有文本的视觉边界框,请使用TextLayoutgetBounds方法。

      注意: 返回的边界以基线相对坐标表示(请参阅类注释)。

      参数:
      str - 指定的String
      frc - 指定的FontRenderContext
      返回:
      在指定FontRenderContext中指定String的边界框的Rectangle2D
      自版本:
      1.2
      参见:
    • getStringBounds

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

      注意: 返回的边界以基线相对坐标表示(请参阅类注释)。

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

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

      注意:返回的边界以基线相对坐标表示(请参阅类注释)。

      参数:
      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)
      返回指定CharacterIterator中索引的字符的逻辑边界,在指定的FontRenderContext中。逻辑边界包含原点、上升、前进和高度,其中包括行间距。逻辑边界并不总是包围所有文本。例如,在某些语言和某些字体中,重音符号可以位于上升部分之上或下降部分之下。要获取包围所有文本的视觉边界框,请使用TextLayoutgetBounds方法。

      注意:返回的边界以基线相对坐标表示(请参阅类注释)。

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

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

      注意:返回的边界以基线相对坐标表示(请参阅类注释)。

      参数:
      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执行,并且应仅对具有统一方向的文本执行。方向在标志参数中指示,通过使用LAYOUT_RIGHT_TO_LEFT表示从右到左(阿拉伯语和希伯来语)的运行方向,或使用LAYOUT_LEFT_TO_RIGHT表示从左到右(英语)的运行方向。

      此外,一些操作,如阿拉伯语成形,需要上下文,以便起始和限制处的字符可以具有正确的形状。有时,提供的范围之外的缓冲区中的数据可能无效。可以将值LAYOUT_NO_START_CONTEXT和LAYOUT_NO_LIMIT_CONTEXT添加到标志参数中,以指示不应检查起始之前或限制之后的文本的上下文。

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

      参数:
      frc - 指定的FontRenderContext
      text - 要布局的文本
      start - 用于GlyphVector的文本起始位置
      limit - 用于GlyphVector的文本结束位置
      flags - 如上所述的控制标志
      返回值:
      一个新的GlyphVector,表示起始位置和结束位置之间的文本,所选取和定位的字形最能代表文本
      抛出:
      ArrayIndexOutOfBoundsException - 如果起始位置或结束位置超出范围
      自版本:
      1.4
      参见: