java swing 实现加载自定义的字体
程序员文章站
2022-06-25 21:16:18
目录java swing 加载自定义的字体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<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); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: 笔记本电脑TFT屏幕完全调教手册
下一篇: Python 操作SQLite数据库详情