Hello,大家好,我是78KgMiao。
场景分析
在软件开发过程中,有时系统字体并不能满足我们的需求,需要去使用自定义字体来吸引用户。这篇文章展示如何加载外部字体,以及在使用时需要注意哪些问题。
代码案例
import com.sun.javafx.tk.Toolkit;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class CustomFont extends Application {
@Override
public void start(Stage stage) throws Exception {
VBox root = new VBox(10.0);
root.setPadding(new Insets(10.0));
Scene scene = new Scene(root, 230, 400);
stage.setTitle("CustomFont");
stage.setScene(scene);
stage.show();
// 1 临时文件目录
System.out.println("java IO 临时目录:" + System.getProperty("java.io.tmpdir"));
new Thread(() -> {
double size = Toolkit.getToolkit().getFontLoader().getSystemFontSize();
// 2 通过下载链接加载自定义字体
Font font = Font.loadFont("https://miaoqx-1259708147.cos.ap-beijing.myqcloud.com/xqnt.ttf", size);
// 3 直接加载自定义字体文件
// try (FileInputStream in = new FileInputStream(new File("E://resources//xqnt.ttf"))) {
// font = Font.loadFont(in, size);
// } catch (Exception e) {
// e.printStackTrace();
// }
for (int i = 0; i < 10; i++) {
size = 14 + i;
// 4 重新加载来切换字号
// font = Font.loadFont("https://miaoqx-1259708147.cos.ap-beijing.myqcloud.com/xqnt.ttf", size);
// 5 通过之前加载的字体来切换字号
font = Font.font(font.getFamily(), size);
Label label = new Label("你好,78KgMiao_" + i);
label.setFont(font);
Platform.runLater(() -> root.getChildren().add(label));
}
}).start();
}
public static void main(String[] args) {
launch(args);
}
}
代码分析
- 注释
1
:打印java程序运行时存放临时文件的目录。- 注释
2
:通过下载链接的方式加载自定义字体。- 注释
3
:通过读取本地字体文件的方式加载字体。- 注释
4
:通过重新加载字体的方式来切换字号。会生成**图2
**所示的临时文件。造成磁盘空间浪费。- 注释
5
:通过之前加载的字体名称来切换字号。会生成**图1
**所示的临时文件。节省磁盘空间,以及提高字体加载时间。
总结:建议在实际开发中将加载自定义字体的功能单独封装,避免重复加载字体,造成临时目录磁盘空间浪费,严重时会导致系统崩溃。
版权声明:本文为weixin_44105483原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。