-------------------------------------------------------------------------------- 注重: 文本绘制方法对x 和 y的解释和外形绘制方法的不同。当绘制一个外形(例如矩形)时, x 和 y指定外形的范围矩形的左上角而不是左下角。 --------------------------------------------------------------------------------
得到Font的信息: FontMetrics The shape-painting example from 范例 2: 外形样本中的外形绘制的范例可以通过选择一个比通常缺省的字体小的字体来进行改进。下面的例子进行了这个工作并且扩大了外形以占据由于字体的减小而释放的空间。下面是改进的applet的截图:
int getAscent(), int getMaxAscent() getAscent 方法返回顶线和基线之间的象素大小。通常,顶线代表大写字母的典型高度。特定的,字体的设计者选择的上行和下行值用来表示恰当地文本“外貌”,或者说墨迹的密度,因此文本就可以像设计者期望的那样显示。上行值通常为几乎所有的字体中的字符提供足够的空间,除了大写字母的accents。getMaxAscent方法计算这些异常高大的字符。
int getDescent(), int getMaxDescent() getDescent 方法返回基线和底线之间的象素大小。对应大多字体,字体中的字符的最低点都在底线以上。可以在万一的情况下,你可以使用getMaxDescent 方法得到能保证包容所有字符的距离。
int getHeight() 返回两个文本的基线间的象素大小。注重这包括行间距。
int getLeading() 得到两行文本间的暗示的距离的象素大小。明确的说,行间距是上一行的的底线和下一行的顶线间的距离。顺便说一下,leading 的发音为 LEDDing。 注重字体的大小 (Font的getSize方法返回的值)是一个抽象的尺寸。理论上,它对应上行值和下行值的和。然而,实际上,字体的设计者才最终决定一个"12 point"的字体的大小。 例如,12点Times字体通常比12点Helvetica字体稍微短一些。通常情况下,字体大小是以点来衡量的,它大约是1/72英寸。
下面的列表显示了FontMetrics对象提供的返回字体的字符的水平大小的方法。这些方法考虑了每个字符四周的空间。更确切的讲,每个方法返回的 不是某个特定字符(或者多个字符)占据的象素大小,而是 the number of pixels taken up by a particular character (or characters), but the number of pixels by which the current point will be advanced when that character (or characters) is shown. 我们称它为advance width以和字符或者文本的宽度相区分。
int getMaxAdvance() 字体中的最宽的字符的advance width(以象素为单位)。 int bytesWidth(byte[], int, int) 由字节数组表示的文本的advance width。第一个整型参数指定数组中的开始偏移量。第二个整型参数指定数组中最后一个需要检查的位置。 int charWidth(int), int charWidth(char) 指定字符的advance width。 int charsWidth(char[], int, int) 由指定的字符数组表示的文本的advance width。 int stringWidth(String) 指定字符串的advance width。 int[] getWidths() 字体中的前256个字符的advance width。