欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java swing 實現(xiàn)加載自定義的字體

 更新時間:2021年11月12日 09:34:04   作者:長河  
這篇文章主要介紹了java swing 實現(xiàn)加載自定義的字體,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

java swing 加載自定義的字體

在實際開發(fā)中, 我們需要把字體的名字和字體做一一對應的映射關系, 然后需要通過可配置的方式加載自定義的字體. 所以就有了這個需求, 我們來實現(xiàn)。

首先我們定義一個自定義加載子類的工具類

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 + "的字體配置不存在");
        }
        //默認先看是不是系統(tǒng)字體
        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都加載了自己配置的字體.

環(huán)境配置, 在resources里面新建一個字體配置文件: font.properties 內容如下:

#字體的配置文件,等號前是字體名字,等號后是字體的路徑 A=D:/logs/蘋方黑體-準-簡.ttf B=D:/logs/蘋方黑體-中粗-簡.ttf C=宋體 D=宋體22222

本來是幫別人寫的代碼, 最后不要了, 就直接開源出來了.

Java swing更改全局字體

這段代碼在jframe顯示前調用,比如main方法開始就調用:

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); 
 }
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java的“Goto”與標簽及使用詳解

    Java的“Goto”與標簽及使用詳解

    goto在Java中是一個保留字,但在語言中并沒有用到它;Java沒有goto。接下來通過本文給大家介紹Java的“Goto”與標簽,感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • SpringBoot集合Mybatis過程解析

    SpringBoot集合Mybatis過程解析

    這篇文章主要介紹了SpringBoot集合Mybatis過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java實現(xiàn)的剪刀石頭布游戲示例

    Java實現(xiàn)的剪刀石頭布游戲示例

    這篇文章主要介紹了Java實現(xiàn)的剪刀石頭布游戲,涉及java隨機數生成及邏輯判定等相關操作技巧,需要的朋友可以參考下
    2017-12-12
  • jvm堆外內存排查圖文舉例詳解

    jvm堆外內存排查圖文舉例詳解

    Java應用程序通過直接方式從操作系統(tǒng)中申請的內存,叫堆外內存,這篇文章主要給大家介紹了關于jvm堆外內存排查的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • 持久層ORM框架Hibernate框架的使用及搭建方式

    持久層ORM框架Hibernate框架的使用及搭建方式

    Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫,本文重點給大家介紹持久層ORM框架Hibernate框架的使用及搭建方式,感興趣的朋友一起看看吧
    2021-11-11
  • 使用DevOps開源利器開發(fā)部署Hygieia平臺

    使用DevOps開源利器開發(fā)部署Hygieia平臺

    這篇文章主要為大家介紹了使用DevOps開源利器開發(fā)部署Hygieia平臺的實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職?加薪
    2022-03-03
  • Java 導出excel進行換行的案例

    Java 導出excel進行換行的案例

    這篇文章主要介紹了Java 導出excel進行換行的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Swing圖形界面實現(xiàn)可動態(tài)刷新的驗證碼

    Swing圖形界面實現(xiàn)可動態(tài)刷新的驗證碼

    這篇文章主要為大家詳細介紹了Swing圖形界面實現(xiàn)可動態(tài)刷新的驗證碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Kotlin 的注解類詳解及實例

    Kotlin 的注解類詳解及實例

    這篇文章主要介紹了Kotlin 的注解類詳解及實例的相關資料,需要的朋友可以參考下
    2017-06-06
  • java實現(xiàn)Xml與json之間的相互轉換操作示例

    java實現(xiàn)Xml與json之間的相互轉換操作示例

    這篇文章主要介紹了java實現(xiàn)Xml與json之間的相互轉換操作,結合實例形式分析了Java xml與json相互轉換工具類的定義與使用相關操作技巧,需要的朋友可以參考下
    2019-06-06

最新評論