在 Java 中,要取得字串在某一種字型所呈現的寬度,需透過 FontMetrics 類別來計算。FontMetrics 為 abstract class,但是我卻找不到 implements 的子類別。不過,可以透過下列方式來取得 FontMetrics 實例。

  1. Graphics.getFontMetrics() 獲取當前字體的字體規格。
  2. Graphics.getFontMetrics(Font f) 獲取指定字體的字體規格。
  3. Component.getFontMetrics(Font font) 獲取指定字體的字體規格。
  4. Component.AccessibleAWTComponent.getFontMetrics(Font f) 獲取此物件的 FontMetrics。
  5. List.AccessibleAWTList.AccessibleAWTListChild.getFontMetrics(Font f) 獲取此物件的 FontMetrics。
  6. MenuComponent.AccessibleAWTMenuComponent.getFontMetrics(Font f) 獲取此物件的 FontMetrics。

因為在取得 FontMetrics 實例時,已經指定字型的字體,所以接下來的函數,用來直接取得字串的顯示寬度。

  1. public int bytesWidth(byte[] data, int off, int len)
    返回顯示此 Font 中指定位元組陣列的總 advance width。advance 是字元串基線上最左邊的點到最右邊的點之間的距離。String 的 advance 不一定是它所有字元的 advance 之和。這等同於測量 String 指定範圍內的字元。

  2. public int charsWidth(char[] data, int off, int len)
    返回顯示此 Font 中指定字元陣列的總 advance width。advance 是字元串基線上最左邊的點到最右邊的點之間的距離。String 的 advance 不一定是它所有字元的 advance 之和。這等同於測量 String 指定範圍內的字元。

  3. public int stringWidth(String str)
    返回此 Font 中指定 String 的總 advance width。advance 是字元串基線上最左邊的點到最右邊的點之間的距離。

  4. public static int computeStringWidth(FontMetrics fm, String str)
    此函數屬於 SwingUtilities 類別,使用具有指定“規格”(大小)的字體計算字元串的寬度。

另外要取得字體的高度可以利用下列方式。

  1. public int getHeight()
    獲取此 Font 中文本行的標準 height。它是相鄰文本行基線之間的距離。它是 leading、ascent、descent 的總和。由於採用了捨入方法,它可能不同於 getAscent()、getDescent()、getLeading() 的總和。不保證以此距離間隔的文本行是不相交的;如果有些字元超出了標準 ascent 或標準 descent,則這些文本行可能會重疊。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()