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

2022-01-24 0 371
目录

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<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

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 java swing 实现加载自定义的字体 http://www.20zxx.cn/297326/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务