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

网友投稿 340 2022-11-23

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 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(fontUrlRdqUuOZgE));

) {

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

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:大数据之Ganglia安装1
下一篇:是德科技推出新型汽车串行器/解串器接收机合规性测试解决方案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~