java.awt

接口
异常
错误
java.lang.Object
  继承者 java.awt.Font
所有已实现的接口:
Serializable
直接已知子类:
FontUIResource

public class Font
     
extends Object
implements Serializable

Font 类表示字体,可以使用它以可见方式呈现文本。字体提供将字符 序列映射到字形 序列所需要的信息,以便在 Graphics 对象和 Component 对象上呈现字形序列。

字符和字形

字符 是表示项的符号(如字母、数字或具有抽象意义的标点)。例如, 'g'( G 的拉丁小写字母)是一个字符。

字形 是用来呈现字符或字符序列的一种形状。在简单的书写系统(如拉丁文)中,通常一个字形就表示一个字符。但在一般情况下,字符和字形并没有一对一的对应关系。例如,字符 'á' A 的带重音符号的拉丁小写字母 可以由两个字形表示:一个是 'a',一个是 '´'。另一方面,两字符的字符串 "fi" 可以由单个字形 "fi" 连字表示。在复杂的书写系统(如阿拉伯语或南亚和东南亚语言)中,字符与字形之间的关系可能更复杂,涉及到依赖于上下文的字形选择以及字形重排序。字体封装了呈现所选择的字符集所需的字形集,还封装了将字符序列映射到相应的字形序列所需的表。

物理字体和逻辑字体

Java Platform 可以区分两种字体: 物理 字体和 逻辑 字体。

物理 字体是实际的字体库,包含字形数据和表,这些数据和表使用字体技术(如 TrueType 或 PostScript Type 1)将字符序列映射到字形序列。Java Platform 的所有实现都支持 TrueType 字体;对其他字体技术的支持是与实现相关的。物理字体可以使用字体名称,如 Helvetica、Palatino、HonMincho 或任意数量的其他字体名称。通常,每种物理字体只支持有限的书写系统集合,例如,只支持拉丁文字符,或者只支持日文和基本拉丁文。可用的物理字体集合随配置的不同而有所不同。要求特定字体的应用程序可以使用 createFont 方法来捆绑这些字体,并对其进行实例化。

逻辑 字体是由必须受所有 Java 运行时环境支持的 Java 平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput。这些逻辑字体不是实际的字体库。此外,由 Java 运行时环境将逻辑字体名称映射到物理字体。映射关系与实现和通常语言环境相关,因此它们提供的外观和规格各不相同。通常,为了覆盖庞大的字符范围,每种逻辑字体名称都映射到几种物理字体。

同级的 AWT 组件(如 LabelTextField)只可以使用逻辑字体。

有关使用物理字体或逻辑字体的相对优势和劣势的讨论,请参阅 Internationalization FAQ 文档。

字体外观和名称

Font 可以有多个外观,如 heavy、medium、oblique、gothic 和 regular。所有这些外观都有相似的排字设计。

可以从 Font 对象获得三种不同的名称。逻辑字体名称 只是用来构造字体的名称。字体外观名称,或外观名称 是特定字体外观的名称,如 Helvetica Bold。系列名称 是字体系列的名称,用来确定多种外观(如 Helvetica)的排字设计。

Font 类表示字体外观集合中字体外观的实例,字体外观集合位于主机系统的系统资源中。例如,Arial Bold 和 Courier Bold Italic 是字体外观。有几个 Font 对象与字体外观相关,每个对象在大小、样式、变换和字体特征上都有所不同。

GraphicsEnvironment 类的 getAllFonts 方法返回系统中所有可用字体外观组成的数组。这些字体外观被作为 Font 对象返回,对象的大小为 1,具有恒等变换和默认字体特征。这些基本字体可以用来派生新的 Font 对象,使之具有变化的大小、样式、变换和字体特征,这些可以通过此类中的 deriveFont 方法实现。

Font 和 TextAttribute

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

一些 TextAttributes 值是不可序列化的,因此尝试序列化具有这样的值的 Font 实例不会使它们获得序列化。这意味着从这样一个流实现序列化的 Font 不会等同于包含不可序列化属性的原始 Font。这应该是很少出现的一个问题,因为这些属性通常只使用在特殊情况下并且不可能被序列化。

  • FOREGROUNDBACKGROUND 使用 Paint 值。子类 Color 是可序列化的,而 GradientPaintTexturePaint 是不可序列化的。
  • CHAR_REPLACEMENT 使用 GraphicAttribute 值。子类 ShapeGraphicAttributeImageGraphicAttribute 是不可序列化的。
  • INPUT_METHOD_HIGHLIGHT 使用 InputMethodHighlight 值,它是不可序列化的。请参阅 InputMethodHighlight
创建 PaintGraphicAttribute 的自定义子类的客户机可以使它们可序列化并避免此问题。使用输入方法高亮显示的客户机可以将这些转换为特定于平台的属性,以便在当前平台上高亮显示它们并在 Font 上设置它们,以此作为解决方法。

基于 Map 的构造方法和 deriveFont API 忽略了 FONT 属性,并且没有通过 Font 保留它;如果 FONT 属性可能存在,则应该使用 static getFont(java.util.Map ) 方法。有关更多信息,请参阅 TextAttribute.FONT

一些属性会带来额外的呈现开销,并且可能调用布局。如果某一 Font 具有这样的属性,那么 hasLayoutAttributes 方法将返回 true。

注:字体旋转可能导致文本基线也跟着旋转。为了应对这种(很少见的)可能性,可以指定字体 API 返回字体规格,并使参数“位于相对于基线的坐标中”。这将 'x' 坐标映射到沿基线的某段距离处(正 x 表示沿基线的正方向),将 'y' 坐标映射到位于 'x' 坐标的基线垂直方向的某段距离处(正 y 表示从基线向量顺时针旋转 90 度)。用于实现这些的 API 特别重要,它们被调出,就像具有“相对于基线的坐标”一样。

另请参见:
序列化表格

字段摘要
static int BOLD
          粗体样式常量。
static int CENTER_BASELINE
          布置文本时,在表意文字的脚本(如中文、日文和韩文)中使用的基线。
static String DIALOG
          逻辑字体 "Dialog" 的规范系列名称的 String 常量。
static String DIALOG_INPUT
          逻辑字体 "DialogInput" 的规范系列名称的 String 常量。
static int HANGING_BASELINE
          布置文本时,在 Devanigiri 和类似脚本中使用的基线。
static int ITALIC
          斜体样式常量。
static int LAYOUT_LEFT_TO_RIGHT
          layoutGlyphVector 的标志,指示文本是从左到右的,这由 Bidi 分析确定。
static int LAYOUT_NO_LIMIT_CONTEXT
          layoutGlyphVector 的标志,指示不应该检查指定 limit 之后的 char 数组中的文本。
static int LAYOUT_NO_START_CONTEXT
          layoutGlyphVector 的标志,指示不应该检查指定 start 之前的 char 数组中的文本。
static int LAYOUT_RIGHT_TO_LEFT
          layoutGlyphVector 的标志,指示文本是从右到左的,这由 Bidi 分析确定。
static String MONOSPACED
          逻辑字体 "Monospaced" 的规范系列名称的 String 常量。
protected  String name
          Font 的逻辑名称,它被传递到构造方法中。
static int PLAIN
          普通样式常量。
protected  float pointSize
          以 float 形式表示的 Font 的磅值大小。
static int ROMAN_BASELINE
          布置文本时,在大多数 Roman 脚本中使用的基线。
static String SANS_SERIF
          逻辑字体 "SansSerif" 的规范系列名称的 String 常量。
static String SERIF
          逻辑字体 "Serif" 的规范系列名称的 String 常量。
protected  int size
          Font 的磅值大小,舍入为整数。
protected  int style
          Font 的样式,它被传递到构造方法中。
static int TRUETYPE_FONT
          标识 TRUETYPE 类型的字体资源。
static int TYPE1_FONT
          标识 TYPE1 类型的字体资源。
 
构造方法摘要
protected Font(Font font)
          根据指定 font 创建一个新 Font
  Font(Map<? extends AttributedCharacterIterator.Attribute,?> attributes)
          创建一个具有指定属性的新 Font
  Font(String name, int style, int size)
          根据指定名称、样式和磅值大小,创建一个新 Font
 
方法摘要
 boolean canDisplay(char c)
          检查此 Font 是否具有指定字符的字形。
 boolean canDisplay(int codePoint)
          检查此 Font 是否具有指定字符的字形。
 int canDisplayUpTo(char[] text, int start, int limit)
          指示此 Font 是否可以显示指定 text 中从 start 开始至 limit 结束的所有字符。
 int canDisplayUpTo(CharacterIterator iter, int start, int limit)
          指示此 Font 是否可以显示由 iter 指定的文本(从 start 开始至 limit 结束)。
 int canDisplayUpTo(String str)
          指示此 Font 是否可以显示指定的 String
static Font createFont(int fontFormat, File fontFile)
          返回一个使用指定字体类型和指定字体文件的新 Font
static Font createFont(int fontFormat, InputStream fontStream)
          返回一个使用指定字体类型和输入数据的新 Font
 GlyphVector createGlyphVector(FontRenderContext frc, char[] chars)
          根据此 Font 中的 Unicode cmap 将字符一一映射到字形,从而创建一个 GlyphVector
 GlyphVector createGlyphVector(FontRenderContext frc, CharacterIterator ci)
          根据此 Font 中的 Unicode cmap 将指定字符一一映射到字形,从而创建一个 GlyphVector
 GlyphVector createGlyphVector(FontRenderContext frc, int[] glyphCodes)
          根据此 Font 中的 Unicode cmap 将字符一一映射到字形,从而创建一个 GlyphVector
 GlyphVector createGlyphVector(FontRenderContext frc, String str)
          根据此 Font 中的 Unicode cmap 将字符一一映射到字形,从而创建一个 GlyphVector
static Font decode(String str)
          返回 str 参数所描述的 Font
 Font deriveFont(AffineTransform trans)
          通过复制当前 Font 对象并应用新的变换,创建一个新 Font 对象。
 Font deriveFont(float size)
          通过复制当前 Font 对象并应用新的大小,创建一个新 Font 对象。
 Font deriveFont(int style)
          通过复制当前的 Font 对象,并应用新的样式,创建一个新 Font 对象。
 Font deriveFont(int style, AffineTransform trans)
          通过复制此 Font 对象并应用新样式和变换,创建一个新 Font 对象。
 Font deriveFont(int style, float size)
          通过复制此 Font 对象并应用新样式和大小,创建一个新 Font 对象。
 Font deriveFont(Map<? extends AttributedCharacterIterator.Attribute,?> attributes)
          通过复制当前 Font 对象并应用新的字体属性集,创建一个新 Font 对象。
 boolean equals(Object obj)
          将此 Font 对象与指定 Object 进行比较。
protected  void finalize()
          移除本机 Font 对象。
 Map<TextAttribute,?> getAttributes()
          返回此 Font 中可用的字体属性的映射。
 AttributedCharacterIterator.Attribute[] getAvailableAttributes()
          返回由此 Font 支持的所有属性的键。
 byte getBaselineFor(char c)
          返回适合用来显示此字符的基线。
 String getFamily()
          返回此 Font 的系列名称。
 String getFamily(Locale l)
          返回此 Font 的系列名称(已经针对指定语言环境进行了本地化)。
static Font getFont(Map<? extends AttributedCharacterIterator.Attribute,?> attributes)
          返回适合于这些属性的 Font
static Font getFont(String nm)
          从系统属性列表返回一个 Font 对象。
static Font getFont(String nm, Font font)
          从系统属性列表获取指定的 Font
 String getFontName()
          返回此 Font 的字体外观名称。
 String getFontName(Locale l)
          返回此 Font 的字体外观名称(已经针对指定语言环境进行了本地化)。
 float getItalicAngle()
          返回此 Font 的斜角。
 LineMetrics getLineMetrics(char[] chars, int beginIndex, int limit, FontRenderContext frc)
          返回使用指定参数创建的 LineMetrics 对象。
 LineMetrics getLineMetrics(CharacterIterator ci, int beginIndex, int limit, FontRenderContext frc)
          返回使用指定参数创建的 LineMetrics 对象。
 LineMetrics getLineMetrics(String str, FontRenderContext frc)
          返回一个使用指定 StringFontRenderContext 创建的 LineMetrics 对象。
 LineMetrics getLineMetrics(String str, int beginIndex, int limit, FontRenderContext frc)
          返回使用指定参数创建的 LineMetrics 对象。
 Rectangle2D getMaxCharBounds(FontRenderContext frc)
          返回最大边界定义在 FontRenderContext 中的字符的边界。
 int getMissingGlyphCode()
          返回此 Font 不具有指定的 unicode 字形时所使用的 glyphCode 代码点。
 String getName()
          返回此 Font 的逻辑名称。
 int getNumGlyphs()
          返回此 Font 中的字形数量。
 java.awt.peer.FontPeer getPeer()
          已过时。 现在,字体呈现与平台无关。
 String getPSName()
          返回此 Font 的 postscript 名称。
 int getSize()
          返回此 Font 的磅值大小,舍入为整数。
 float getSize2D()
          返回此 Font 的磅值大小(以 float 值表示)。
 Rectangle2D getStringBounds(char[] chars, int beginIndex, int limit, FontRenderContext frc)
          返回指定 FontRenderContext 指定字符数组的逻辑边界。
 Rectangle2D getStringBounds(CharacterIterator ci, int beginIndex, int limit, FontRenderContext frc)
          返回指定 FontRenderContext 中针对指定 CharacterIterator 进行索引的字符的逻辑边界。
 Rectangle2D getStringBounds(String str, FontRenderContext frc)
          返回指定 FontRenderContext 中指定 String 的逻辑边界。
 Rectangle2D getStringBounds(String str, int beginIndex, int limit, FontRenderContext frc)
          返回指定 FontRenderContext 中指定 String 的逻辑边界。
 int getStyle()
          返回此 Font 的样式。
 AffineTransform getTransform()
          返回与此 Font 相关的变换的副本。
 int hashCode()
          返回此 Font 的哈希码。
 boolean hasLayoutAttributes()
          如果此 Font 包含需要额外布局处理的属性,则返回 true。
 boolean hasUniformLineMetrics()
          检查此 Font 是否具有统一的行规格。
 boolean isBold()
          指示此 Font 对象的样式是否为 BOLD。
 boolean isItalic()
          指示此 Font 对象的样式是否为 ITALIC。
 boolean isPlain()
          指示此 Font 对象的样式是否为 PLAIN。
 boolean isTransformed()
          指示此 Font 对象是否具有影响其大小以及 Size 属性的变换。
 GlyphVector layoutGlyphVector(FontRenderContext frc, char[] text, int start, int limit, int flags)
          返回一个新 GlyphVector 对象,执行完整的文本布局(如有可能)。
 String toString()
          将此 Font 对象转换为 String 表示形式。
 
从类 java.lang.Object 继承的方法
clone, getClass, notify, notifyAll, wait, wait, wait
 

字段详细信息

DIALOG

public static final String DIALOG
逻辑字体 "Dialog" 的规范系列名称的 String 常量。它在 Font 构造中很有用,可提供该名称的编译时验证。

从以下版本开始:
1.6
另请参见:
常量字段值

DIALOG_INPUT

public static final String DIALOG_INPUT
逻辑字体 "DialogInput" 的规范系列名称的 String 常量。它在 Font 构造中很有用,可提供该名称的编译时验证。

从以下版本开始:
1.6
另请参见:
常量字段值

SANS_SERIF

public static final String SANS_SERIF
逻辑字体 "SansSerif" 的规范系列名称的 String 常量。它在 Font 构造中很有用,可提供该名称的编译时验证。

从以下版本开始:
1.6
另请参见:
常量字段值

SERIF

public static final String SERIF
逻辑字体 "Serif" 的规范系列名称的 String 常量。它在 Font 构造中很有用,可提供该名称的编译时验证。

从以下版本开始:
1.6
另请参见:
常量字段值

MONOSPACED

public static final String MONOSPACED
逻辑字体 "Monospaced" 的规范系列名称的 String 常量。它在 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
布置文本时,在大多数 Roman 脚本中使用的基线。

另请参见:
常量字段值

CENTER_BASELINE

public static final int CENTER_BASELINE
布置文本时,在表意文字的脚本(如中文、日文和韩文)中使用的基线。

另请参见:
常量字段值

HANGING_BASELINE

public static final int HANGING_BASELINE
布置文本时,在 Devanigiri 和类似脚本中使用的基线。

另请参见:
常量字段值

TRUETYPE_FONT

public static final int TRUETYPE_FONT
标识 TRUETYPE 类型的字体资源。可用它为 createFont(int, java.io.InputStream) 方法指定一个 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 的逻辑名称,它被传递到构造方法中。

从以下版本开始:
JDK1.0
另请参见:
getName()

style

protected int style
Font 的样式,它被传递到构造方法中。此样式可以为 PLAIN、BOLD、ITALIC 或 BOLD+ITALIC。

从以下版本开始:
JDK1.0
另请参见:
getStyle()

size

protected int size
Font 的磅值大小,舍入为整数。

从以下版本开始:
JDK1.0
另请参见:
getSize()

pointSize

protected float pointSize
float 形式表示的 Font 的磅值大小。

另请参见:
getSize(), getSize2D()

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 分析确定。

另请参见: