2012-10-08 23 views
3

我需要從一行的基線到基線到下一行文本的距離,它與JTextArea中的佈局相同。爲此,我只有一個指定字體大小的字體。如何獲取字體的行高,如在JTextArea中?

我的問題是,在字體上,我只能得到LineMetrics或FontMetrics,並且它們都根據當前文本具有不同大小的行(getAscent/getHeight/getDescent) - 例如,如果有字母f,上升更大,如果有g,我有下降。

有沒有辦法獲得「全球」字體高度屬性?所以我將能夠正確地在Graphics2D上繪製文本。

+0

如[本答案](http://stackoverflow.com/a/6296381/418556)中所述,您可能會發現'GlyphVector'具有更多實用性。另一種方法是將整個文本放在HTML格式的標籤中,然後使用標籤的首選大小作爲生成文本的寬度/高度,如[本答案]中所示(http://stackoverflow.com/a/7775713/418556)。 –

回答

4

從JavaDoc中FontMetrics.getHeight()

獲取在該字體中一行文本的標準高度。這是相鄰文本行的基線之間的距離。它是領先+上升+下降的總和 。由於四捨五入,這可能不是 與getAscent()+ getDescent()+ getLeading()相同。沒有 保證在這個距離間隔的文本行是不相交的; 如果某些字符超過標準上升標準或標準下降度量標準,則這些行可能會重疊。

所以如果你的字體正確實現,這應該是你應該放在兩行文本之間的距離。

+0

如何實例化FontMetrics對象?這個類本身是抽象的。 – ArtOfWarfare

+1

@ArtOfWarfare:你從'Graphics'對象中獲得它:http://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html#getFontMetrics-java.awt.Font- –