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 MapfontNameMap = 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
第二部再就是写测试代码:
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); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。