如何获取字体的行高,例如在JTextArea中?

4
我需要获取一行文本基线到下一行文本基线的距离,就像在JTextArea中布局一样。为此,我只有一个指定字体大小的字体。
我的问题是,在字体上,我只能获得LineMetrics或FontMetrics,它们都具有不同大小的行(getAscent/getHeight/getDescent),具体取决于当前文本-例如,如果有字母“f”,则上升较大,如果有“g”,则下降较大。
是否有一种方法可以获取“全局”字体高度属性?这样我就可以正确地在Graphics2D上绘制文本。

你可能会发现GlyphVector更有用,正如这个答案中所提到的。另一种方法是将整个文本放在一个HTML格式的标签中,然后使用标签的首选大小作为结果文本的宽度/高度,就像这个答案中所示。 - Andrew Thompson
1个回答

6
根据FontMetrics.getHeight()的JavaDoc:
获取此字体中一行文本的标准高度。这是相邻文本行基线之间的距离。它是前导+上升+下降的总和。由于四舍五入,这可能与getAscent() + getDescent() + getLeading()不同。不能保证在此距离处间隔的文本行是不重叠的;如果某些字符超过了标准上升或标准下降指标,则此类行可能会重叠。
因此,如果您的字体实现正确,则应将此距离放置在两行文本之间。

1
我该如何实例化一个FontMetrics对象?这个类本身是抽象的。 - ArtOfWarfare
1
@ArtOfWarfare:你可以从你的Graphics对象中获取它:http://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html#getFontMetrics-java.awt.Font- - Denis Tulskiy
1
获取FontMetrics的另一种(更简单?)方法是使用JComponent的getFontMetrics()方法。类似于:myTextArea.getFontMetrics(myTextArea.getFont()) - Mike Viens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接