文档

Java™ 教程
隐藏目录
文本布局概念
路径:2D图形
课程:使用文本API

文本布局概念

在显示文本之前,必须使用适当的字形和连字来正确地形状和定位。这个过程被称为文本布局。文本布局过程包括以下内容:

用于布局文本的信息也对执行文本操作(如插入符定位、命中检测和高亮显示)是必需的。有关这些文本操作的更多信息,请参阅使用双向文本

要开发可以在国际市场上部署的软件,必须以符合适当书写系统规则的方式布局不同语言的文本。

本节涵盖以下主题:

形状文本

一个字形是一个或多个字符的可视表示。字形的形状、大小和位置取决于其上下文。根据字体和样式的不同,可以使用许多不同的字形来表示一个字符或字符组合。

例如,在手写草书文本中,一个特定的字符可以根据其与相邻字符的连接方式而采用不同的形状。

在某些书写系统中,特别是阿拉伯语,必须始终考虑到字形的上下文。与英语不同,阿拉伯语中的草书形式是强制性的;不能不使用草书形式呈现文本是不可接受的。

根据上下文,这些草书形式的形状可以有很大的不同。例如,阿拉伯字母heh具有以下图示中显示的四种草书形式:

阿拉伯语中未连接、右侧连接、两侧连接和左侧连接的草书形式的示例

尽管这四种形式彼此非常不同,但这种草书形状的变化与英语中的草书写作并没有根本区别。

在某些情况下,两个字形甚至可以更根本地改变形状并合并成一个单一的字形。这种合并字形称为连字。例如,大多数英文字体包含以下图示中显示的连字fi

fi的连字

合并字形考虑到了字母f的悬挂部分,并以一种自然的方式将字符组合在一起,而不是简单地让字母发生碰撞。

连字在阿拉伯语中也被使用,并且使用某些连字是强制性的;如果不使用适当的连字来显示特定的字符组合是不可接受的。当从阿拉伯字符中形成连字时,形状的变化比在英语中更加根本。例如,下图说明了当两个阿拉伯字符一起出现时,它们如何组合成一个单个的连字。

当两个阿拉伯字符一起出现时,它们如何组合成一个单个的连字

文本排序

在Java编程语言中,文本使用Unicode字符编码进行编码。使用Unicode字符编码的文本以逻辑顺序存储在内存中。逻辑顺序是字符和单词被读取和写入的顺序。逻辑顺序不一定与视觉顺序相同,即对应的字形显示的顺序。

特定书写系统(脚本)中字形的视觉顺序称为脚本顺序。例如,罗马文本的脚本顺序是从左到右,而阿拉伯文和希伯来文的脚本顺序是从右到左。

某些书写系统除了脚本顺序外,还有其他规则来排列字形和文本行。例如,阿拉伯文和希伯来文的数字从左到右排列,即使字母从右到左排列。这意味着阿拉伯文和希伯来文,即使没有嵌入英文文本,也是真正的双向文本。有关更多信息,请参见使用双向文本

文本测量和定位

除非您使用等宽字体,否则字体中的不同字符具有不同的宽度。这意味着所有文本的定位和测量都必须考虑到使用的确切字符,而不仅仅是数量。例如,要将在比例字体中显示的一列数字右对齐,不能简单地使用额外的空格来定位文本。为了正确对齐列,您需要知道每个数字的确切宽度,以便进行相应调整。

文本通常使用多种字体和样式(如粗体或斜体)来显示。在这种情况下,即使是相同的字符在样式上也可能具有不同的形状和宽度。为了正确定位、测量和渲染文本,您需要跟踪每个单独的字符应用于该字符的样式。幸运的是,TextLayout类可以为您完成这些工作。

要在希伯来文和阿拉伯文等语言中正确显示文本,需要在相邻字符的上下文中测量和定位每个单独的字符。由于字符的形状和位置可能会根据上下文而变化,如果不考虑上下文进行测量和定位,会产生不可接受的结果。

此外,Java SE 还为您提供了 FontMetrics 类,该类使您能够获取由 Font 对象渲染的文本的测量值,例如字体中一行文本的高度。您可以利用这些信息来在 Java 图形应用程序中精确定位文本。有关更多信息,请参见测量文本


上一页:字体概念
下一页:物理和逻辑字体