这些 Java 教程是为 JDK 8 编写的。本页描述的示例和实践不利用后续版本引入的改进,并可能使用不再可用的技术。
请参阅 Java 语言更改,了解 Java SE 9 及后续版本中更新的语言特性的摘要。
请参阅 JDK 发行说明,了解所有 JDK 版本的新功能、增强功能以及已移除或废弃选项的信息。
要正确测量文本,您需要学习一些方法并避免一些错误。字体度量是由Font
对象渲染的文本的度量,例如字体中一行文本的高度。测量文本的最常见方法是使用FontMetrics
实例,该实例封装了此度量信息。例如:
// 从图形中获取度量 FontMetrics metrics = graphics.getFontMetrics(font); // 获取字体和渲染上下文中一行文本的高度 int hgt = metrics.getHeight(); // 获取字体和渲染上下文中我的文本的前进宽度 int adv = metrics.stringWidth(text); // 计算包含文本的框的大小,带有一些填充。 Dimension size = new Dimension(adv+2, hgt+2);
这种方法对于许多应用程序来说足够了,可以均匀地间隔文本行或调整Swing组件的大小。
请注意以下内容:
Graphics
类获取的,因为此类封装了FontRenderContext
,需要精确测量文本。在屏幕分辨率下,字体会进行调整以提高阅读性。随着文本大小的增加,此调整不会线性缩放。因此,以20磅为例,与10磅相比,字体不会显示文本的长度恰好是两倍。除了文本本身和字体之外,测量文本所需的另一个重要信息是FontRenderContext
。该方法包括用于测量文本的用户空间到设备像素的变换。stringWidth()
返回文本的前进宽度。 前进宽度是从文本的原点到随后呈现字符串的位置的距离。使用这些方法测量文本时,请注意文本可以在矩形范围之外的任何方向上延伸,该矩形由字体高度和字符串的前进宽度定义。
通常,最简单的解决方案是确保文本不会被裁剪,例如,由包围文本的组件。在文本可能被裁剪的情况下添加填充。
如果此解决方案不足够,Java 2D软件中的其他文本测量API可以返回矩形边界框。这些边界框考虑了要测量的特定文本的高度和像素化效果。