您好,登錄后才能下訂單哦!
這篇文章主要介紹了java swing如何實(shí)現(xiàn)加載自定義的字體,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
在實(shí)際開(kāi)發(fā)中, 我們需要把字體的名字和字體做一一對(duì)應(yīng)的映射關(guān)系, 然后需要通過(guò)可配置的方式加載自定義的字體. 所以就有了這個(gè)需求, 我們來(lái)實(shí)現(xiàn)。
首先我們定義一個(gè)自定義加載子類(lèi)的工具類(lèi)
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; /** * 字體工具類(lèi), 獲取需要的字體 */ public class FontUtil { /** * 所有字體配置 */ private static Map<String, String> fontNameMap = new HashMap<String, String>(); /** * 默認(rèn)字體的大小 */ private static final float defaultFontSize = 20f; static { //加載配置文件 Properties properties = new Properties(); // 使用properties對(duì)象加載輸入流, 編碼使用GBK try { properties.load(new InputStreamReader(FontUtil.class.getClassLoader().getResourceAsStream("font.properties"), "GBK")); } catch (IOException e) { System.err.println("font.properties 配置文件不存在"); } //獲取key對(duì)應(yīng)的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 + "的字體配置不存在"); } //默認(rèn)先看是不是系統(tǒng)字體 Font font = new Font(fontUrl, Font.PLAIN, (int) fontSize); //判斷當(dāng)前字體存不存在 if ("Dialog.plain".equals(font.getFontName())) { try ( InputStream is = new FileInputStream(new File(fontUrl)); ) { Font definedFont = Font.createFont(Font.TRUETYPE_FONT, is); //設(shè)置字體大小,float型 definedFont = definedFont.deriveFont(fontSize); return definedFont; } catch (Exception e) { throw new RuntimeException("名字是:" + key + "的字體不存在"); } } return font; } }
第二部再就是寫(xiě)測(cè)試代碼:
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"); } }
運(yùn)行, 第四個(gè)字體不存在, 拋出異常 , 其他的都正常處理了, A, B都加載了自己配置的字體.
環(huán)境配置, 在resources里面新建一個(gè)字體配置文件: font.properties 內(nèi)容如下:
#字體的配置文件,等號(hào)前是字體名字,等號(hào)后是字體的路徑 A=D:/logs/蘋(píng)方黑體-準(zhǔn)-簡(jiǎn).ttf B=D:/logs/蘋(píng)方黑體-中粗-簡(jiǎn).ttf C=宋體 D=宋體22222
本來(lái)是幫別人寫(xiě)的代碼, 最后不要了, 就直接開(kāi)源出來(lái)了.
這段代碼在jframe顯示前調(diào)用,比如main方法開(kāi)始就調(diào)用:
public static void setUIFont() { Font f = new Font("宋體",Font.PLAIN,18); String names[]={ "Label", "CheckBox", "PopupMenu","MenuItem", "CheckBoxMenuItem", "JRadioButtonMenuItem","ComboBox", "Button", "Tree", "ScrollPane", "TabbedPane", "EditorPane", "TitledBorder", "Menu", "TextArea", "OptionPane", "MenuBar", "ToolBar", "ToggleButton", "ToolTip", "ProgressBar", "TableHeader", "Panel", "List", "ColorChooser", "PasswordField","TextField", "Table", "Label", "Viewport", "RadioButtonMenuItem","RadioButton", "DesktopPane", "InternalFrame" }; for (String item : names) { UIManager.put(item+ ".font",f); } }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“java swing如何實(shí)現(xiàn)加載自定義的字體”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。