本教程适用于JDK 8。本页面描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息,请参阅JDK发行说明。
Java 2D API具有各种文本渲染功能,包括用于呈现字符串的方法和用于设置字体属性和执行文本布局的整个类。
如果您只想绘制静态文本字符串,则可以直接通过Graphics
类使用drawString
方法进行渲染。要指定字体,可以使用Graphics
类的setFont
方法。
如果您想实现自己的文本编辑程序或需要对文本的布局进行更多控制,超过文本组件所提供的,您可以使用java.awt.font
包中的Java 2D文本布局类。
字体用于表示字符串中的字符的形状称为字形。一个特定的字符或字符组合可以表示为一个或多个字形。例如,á可能由两个字形表示,而连字fi可能由一个字形表示。
字体可以被认为是一组字形。单个字体可以有许多面,例如斜体和常规。字体中的所有面具有类似的印刷特征,并且可以被识别为同一族的成员。换句话说,具有特定样式的字形集合形成一个字体面。字体面的集合形成一个字体族。字体族的集合形成了系统上可用的字体集。
在使用Java 2D API时,可以通过使用Font
的实例来指定字体。可以通过调用静态方法GraphicsEnvironment.getLocalGraphicsEnvironment
并查询返回的GraphicsEnvironment
来确定有哪些字体可用。 getAllFonts
方法返回一个包含系统上所有可用字体的Font
实例的数组。 getAvailableFontFamilyNames
方法返回可用字体族的列表。
在文本可以显示之前,必须对其进行布局,以便字符由适当的字形在正确的位置上表示。以下是用于管理文本布局的两种Java 2D机制:
TextLayout
类管理文本布局、高亮显示和命中检测。 TextLayout
提供的功能处理最常见的情况,包括具有混合字体、混合语言和双向文本的字符串。Font
类创建自己的GlyphVector
对象,然后通过Graphics2D
类渲染每个GlyphVector
对象。因此,可以完全控制文本的形状和位置。Java 2D API允许您通过使用渲染提示来控制形状和文本渲染的质量。渲染提示由java.awt.RenderingHints
类封装。
在应用于文本时,此功能用于抗锯齿(也称为平滑边缘)。例如,KEY_TEXT_ANTIALIASING
提示使您可以单独控制文本的抗锯齿,而不影响其他形状的抗锯齿。要了解有关渲染提示的更多信息,请参阅控制渲染质量教程。