java swing 載入自定義的字型
阿新 • • 發佈:2021-02-02
技術標籤:Java Basicjava
在實際開發中, 我們需要把字型的名字和字型做一一對應的對映關係, 然後需要通過可配置的方式載入自定義的字型. 所以就有了這個需求, 我們來實現.
首先我們定義一個自定義載入子類的工具類:
import java.awt.Font; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import java.util.Properties; /** * 字型工具類, 獲取需要的字型 */ public class FontUtil { /** * 所有字型配置 */ private static Map<String, String> fontNameMap = new HashMap<String, String>(); /** * 預設字型的大小 */ private static final float defaultFontSize = 20f; static { //載入配置檔案 Properties properties = new Properties(); // 使用properties物件載入輸入流, 編碼使用GBK try { properties.load(new InputStreamReader(FontUtil.class.getClassLoader().getResourceAsStream("font.properties"), "GBK")); } catch (IOException e) { System.err.println("font.properties 配置檔案不存在"); } //獲取key對應的value值 for (Map.Entry<Object, Object> entry : properties.entrySet()) { Object key = entry.getKey(); Object value = entry.getValue(); if (key != null && value != null) { fontNameMap.put(String.valueOf(key), String.valueOf(value)); } } } /** * 獲取定義的字型 * * @param key 字型的名字 * @return */ public static Font getConfigFont(String key) { return getConfigFont(key, defaultFontSize); } /** * 獲取自定義的字型 * * @param key 字型的名字 * @param fontSize 字型的大小 * @return */ public static Font getConfigFont(String key, float fontSize) { String fontUrl = fontNameMap.get(key); if (fontUrl == null) { throw new RuntimeException("名字是:" + key + "的字型配置不存在"); } //預設先看是不是系統字型 Font font = new Font(fontUrl, Font.PLAIN, (int) fontSize); //判斷當前字型存不存在 if ("Dialog.plain".equals(font.getFontName())) { try ( InputStream is = new FileInputStream(new File(fontUrl)); ) { Font definedFont = Font.createFont(Font.TRUETYPE_FONT, is); //設定字型大小,float型 definedFont = definedFont.deriveFont(fontSize); return definedFont; } catch (Exception e) { throw new RuntimeException("名字是:" + key + "的字型不存在"); } } return font; } }
第二部再就是寫測試程式碼:
import java.awt.*; public class Demo { public static void main(String[] args) throws Exception { Font a = FontUtil.getConfigFont("A"); System.out.println(a.getName() + "~" + a.getSize()); Font b = FontUtil.getConfigFont("B", 100); System.out.println(b.getName() + "~" + b.getSize()); Font c = FontUtil.getConfigFont("C"); System.out.println(c.getFontName()); Font d = FontUtil.getConfigFont("D"); } }
執行, 第四個字型不存在, 丟擲異常 , 其他的都正常處理了, A, B都載入了自己配置的字型.
環境配置, 在resources裡面新建一個字型配置檔案: font.properties 內容如下:
#字型的配置檔案,等號前是字型名字,等號後是字型的路徑
A=D:/logs/蘋方黑體-準-簡.ttf
B=D:/logs/蘋方黑體-中粗-簡.ttf
C=宋體
D=宋體22222
本來是幫別人寫的程式碼, 最後不要了, 就直接開源出來了.