最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

java swing 加載自定義的字體

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

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

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>();
 
    /**
     * 默認(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;
    }  
}

第二部再就是寫測(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/蘋方黑體-準(zhǔn)-簡(jiǎn).ttf B=D:/logs/蘋方黑體-中粗-簡(jiǎn).ttf C=宋體 D=宋體22222

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

Java swing更改全局字體

這段代碼在jframe顯示前調(diào)用,比如main方法開始就調(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); 
 }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java版仿QQ驗(yàn)證碼風(fēng)格圖片驗(yàn)證碼

    Java版仿QQ驗(yàn)證碼風(fēng)格圖片驗(yàn)證碼

    這篇文章主要為大家分享了java圖片驗(yàn)證碼實(shí)例代碼,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 使用Feign調(diào)用第三方http接口

    使用Feign調(diào)用第三方http接口

    這篇文章主要介紹了使用Feign調(diào)用第三方http接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot多數(shù)據(jù)源配置并通過注解實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源

    SpringBoot多數(shù)據(jù)源配置并通過注解實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源

    本文主要介紹了SpringBoot多數(shù)據(jù)源配置并通過注解實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 實(shí)例解析Java單例模式編程中對(duì)抽象工廠模式的運(yùn)用

    實(shí)例解析Java單例模式編程中對(duì)抽象工廠模式的運(yùn)用

    這篇文章主要介紹了實(shí)例解析Java單例模式編程中對(duì)抽象工廠模式的運(yùn)用,抽象工廠模式可以看作是工廠方法模式的升級(jí)版,本需要的朋友可以參考下
    2016-02-02
  • Java Number類原理實(shí)例解析

    Java Number類原理實(shí)例解析

    這篇文章主要介紹了Java Number類原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java中的List接口實(shí)現(xiàn)類解析

    Java中的List接口實(shí)現(xiàn)類解析

    這篇文章主要介紹了Java中的List接口實(shí)現(xiàn)類解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 關(guān)于Java單個(gè)TCP(Socket)連接發(fā)送多個(gè)文件的問題

    關(guān)于Java單個(gè)TCP(Socket)連接發(fā)送多個(gè)文件的問題

    這篇文章主要介紹了關(guān)于Java單個(gè)TCP(Socket)連接發(fā)送多個(gè)文件的問題,每次我只能使用一個(gè) Socket 發(fā)送一個(gè)文件,沒有辦法做到連續(xù)發(fā)送文件,本文來解決這個(gè)問題,需要的朋友可以參考下
    2023-04-04
  • 使用java8 API遍歷過濾文件目錄及子目錄和隱藏文件示例詳解

    使用java8 API遍歷過濾文件目錄及子目錄和隱藏文件示例詳解

    這篇文章主要介紹了使用java8API遍歷過濾文件目錄及子目錄及隱藏文件示例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • MyBatis Plus 入門使用詳細(xì)教程

    MyBatis Plus 入門使用詳細(xì)教程

    這篇文章主要介紹了MyBatis Plus 入門使用詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringCloud持久層框架MyBatis Plus的使用與原理解析

    SpringCloud持久層框架MyBatis Plus的使用與原理解析

    MyBatisPlus為MyBatis的增強(qiáng)版,專注于簡(jiǎn)化數(shù)據(jù)庫操作,提供自動(dòng)化CRUD、內(nèi)置分頁和樂觀鎖等功能,極大提升開發(fā)效率,在SpringCloud微服務(wù)架構(gòu)中,MyBatisPlus通過插件機(jī)制和自動(dòng)生成代碼功能,有效支持企業(yè)級(jí)應(yīng)用和分布式系統(tǒng)的開發(fā)
    2024-10-10

最新評(píng)論

鸡泽县| 盖州市| 东至县| 江津市| 大姚县| 田东县| 桃源县| 棋牌| 漳州市| 分宜县| 三河市| 平塘县| 宝清县| 四会市| 安塞县| 平定县| 通海县| 兖州市| 深州市| 金山区| 克什克腾旗| 基隆市| 六安市| 汤原县| 遵化市| 开鲁县| 秦安县| 台东市| 巩义市| 东丰县| 攀枝花市| 弥勒县| 和林格尔县| 镇宁| 称多县| 淄博市| 宁安市| 洛宁县| 台江县| 清远市| 来宾市|