簡介
它包含對表示 Type 1、Type 1 Multiple Master 字型、OpenType 字型和 TrueType 字型的支持。
從以下版本開始:
1.2
具體描述
字元和字形
字元 是表示項的符號(如字母、數字或具有抽象意義的標點)。例如,'g'(G 的拉丁小寫字母)是一個字元。
字形 是用來呈現字元或字元序列的一種形狀。在簡單的書寫系統(如拉丁文)中,通常一個字形就表示一個字元。但在一般情況下,字元和字形並沒有一對一的對應關係。例如,字元 'á' A 的帶重音符號的拉丁小寫字母 可以由兩個字形表示:一個是 'a',一個是 '′'。另一方面,兩字元的字元串 "fi" 可以由單個字形 "fi" 連字表示。在複雜的書寫系統(如阿拉伯語或南亞和東南亞語言)中,字元與字形之間的關係可能更複雜,涉及到依賴於上下文的字形選擇以及字形重排序。字型封裝了呈現所選擇的
字元集所需的字形集,還封裝了將字元序列映射到相應的字形序列所需的表。
物理字型和邏輯字型Java Platform 可以區分兩種字型:
物理 字型和
邏輯 字型。
物理 字型是實際的字型庫,包含字形數據和表,這些數據和表使用字型技術(如 TrueType 或 PostScript Type 1)將
字元序列映射到字形序列。Java Platform 的所有實現都支持 TrueType 字型;對其他字型技術的支持是與實現相關的。物理字型可以使用字型名稱,如 Helvetica、Palatino、HonMincho 或任意數量的其他字型名稱。通常,每種物理字型只支持有限的書寫系統集合,例如,只支持拉丁文
字元,或者只支持日文和基本拉丁文。可用的物理字型集合隨配置的不同而有所不同。要求特定字型的應用程式可以使用
createFont 方法來捆綁這些字型,並對其進行實例化。
邏輯 字型是由必須受所有 Java 運行時環境支持的 Java 平台所定義的五種字型系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput。這些邏輯字型不是實際的字型庫。此外,由 Java 運行時環境將邏輯字型名稱映射到物理字型。映射關係與實現和通常語言環境相關,因此它們提供的外觀和規格各不相同。通常,為了覆蓋龐大的字元範圍,每種邏輯字型名稱都映射到幾種物理字型。
同級的 AWT 組件(如
Label 和 TextField)只可以使用邏輯字型。
有關使用物理字型或邏輯字型的相對優勢和劣勢的討論,請參閱 Internationalization FAQ 文檔。
字型外觀和名稱Font 可以有多個外觀,如 heavy、medium、oblique、gothic 和 regular。所有這些外觀都有相似的排字設計。 可以從 Font 對象獲得三種不同的名稱。邏輯字型名稱 只是用來構造字型的名稱。字型外觀名稱,或外觀名稱 是特定字型外觀的名稱,如 Helvetica Bold。系列名稱 是字型系列的名稱,用來確定多種外觀(如 Helvetica)的排字設計。
Font 類表示字型外觀集合中字型外觀的實例,字型外觀集合位於
主機系統的系統資源中。例如,Arial Bold 和 Courier Bold Italic 是字型外觀。有幾個 Font 對象與字型外觀相關,每個對象在大小、樣式、變換和字型特徵上都有所不同。
GraphicsEnvironment 類的 getAllFonts 方法返回系統中所有可用字型外觀組成的數組。這些字型外觀被作為 Font 對象返回,對象的大小為 1,具有恆等變換和默認字型特徵。這些基本字型可以用來派生新的 Font 對象,使之具有變化的大小、樣式、變換和字型特徵,這些可以通過此類中的 deriveFont 方法實現。
Font 和 TextAttributeFont 支持大多數 TextAttribute。這使得一些操作(如呈現帶下劃線的文本)變得更方便,因為沒必要再顯式構造一個 TextLayout 對象。通過使用 TextAttribute 值的 Map 來構造或派生屬性,可以在 Font 上設定屬性。
一些 TextAttributes 值是不可序列化的,因此嘗試序列化具有這樣的值的 Font 實例不會使它們獲得序列化。這意味著從這樣一個流實現序列化的 Font 不會等同於包含不可序列化屬性的原始 Font。這應該是很少出現的一個問題,因為這些屬性通常只使用在特殊情況下並且不可能被序列化。
FOREGROUND 和 BACKGROUND 使用 Paint 值。子類 Color 是可序列化的,而 GradientPaint 和 TexturePaint 是不可序列化的。 CHAR_REPLACEMENT 使用 GraphicAttribute 值。子類 ShapeGraphicAttribute 和 ImageGraphicAttribute 是不可序列化的。 INPUT_METHOD_HIGHLIGHT 使用 InputMethodHighlight 值,它是不可序列化的。請參閱 InputMethodHighlight。 創建 Paint 和 GraphicAttribute 的自定義子類的客戶機可以使它們可序列化並避免此問題。使用輸入方法高亮顯示的客戶機可以將這些轉換為特定於平台的屬性,以便在當前平台上高亮顯示它們並在 Font 上設定它們,以此作為解決方法。 基於 Map 的
構造方法和 deriveFont API 忽略了 FONT 屬性,並且沒有通過 Font 保留它;如果 FONT 屬性可能存在,則應該使用 static getFont(java.util.Map) 方法。有關更多信息,請參閱 TextAttribute.FONT。
一些屬性會帶來額外的呈現開銷,並且可能調用布局。如果某一 Font 具有這樣的屬性,那么 hasLayoutAttributes 方法將返回 true。
註:字型旋轉可能導致文本基線也跟著旋轉。為了應對這種(很少見的)可能性,可以指定字型 API 返回字型規格,並使參數“位於相對於
基線的坐標中”。這將 'x' 坐標映射到沿
基線的某段距離處(正 x 表示沿基線的正方向),將 'y' 坐標映射到位於 'x' 坐標的基線垂直方向的某段距離處(正 y 表示從基線向量順時針旋轉 90 度)。用於實現這些的 API 特別重要,它們被調出,就像具有“相對於
基線的坐標”一樣。