目录
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); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
做猪小侠源码的代理,提供一站式服务
如果你不懂得搭建网站或者服务器,小程序,源码之类的怎么办? 第一通过本站学习各种互联网的技术 第二就是联系客服,我帮帮你搭建(当然要收取部分的费用) 第三成为我们的代理,我们提供整套的服务。