千家信息网

java swing如何实现加载自定义的字体

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍了java swing如何实现加载自定义的字体,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java swing 加载
千家信息网最后更新 2025年11月08日java swing如何实现加载自定义的字体

这篇文章主要介绍了java swing如何实现加载自定义的字体,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

java swing 加载自定义的字体

在实际开发中, 我们需要把字体的名字和字体做一一对应的映射关系, 然后需要通过可配置的方式加载自定义的字体. 所以就有了这个需求, 我们来实现。

首先我们定义一个自定义加载子类的工具类

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 fontNameMap = new HashMap();     /**     * 默认字体的大小     */    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 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

本来是帮别人写的代码, 最后不要了, 就直接开源出来了.

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 swing如何实现加载自定义的字体"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

字体 配置 名字 文件 篇文章 代码 大小 宋体 工具 等号 黑体 一一对应 价值 全局 兴趣 内容 同时 子类 实际 对象 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 国产化服务器安全保密授权 深宁管理服务器 佳能750打印机服务器系统 sql数据库服务端地址 空洞骑士用什么软件开发的 巨衫数据库上市 方舟生存进化服务器里有什么 深圳正规的网络安全建设 广州梦想网络技术 北京警院网络安全二等功 外文期刊收录数据库 文明重启怎样造服务器 哪些软件开发模型是增量模型 手机发生相机服务器错误 中国象棋软件的数据库 网络安全宣传靠大家卡片幼儿园 数据库oracle权限 数据库判断值在哪个范围 数据库外码怎样保证同步修改 维普数据库哪些全文获取方式 网络安全施工需要资质吗 西城区正规软件开发资费 阴阳师有个服务器叫云之什么 日本的网络安全部 网络安全经费申请 服务器ip保存在哪个文件夹 对局服务器延迟极高怎么回事 长春万象软件开发 软件开发 项目管理工作 网络技术基础实验二的实验报告
0