gpt4 book ai didi

fonts - 如何在 JavaFx 2.2 中嵌入 .ttf 字体?

转载 作者:行者123 更新时间:2023-11-28 08:13:46 33 4
gpt4 key购买 nike

首先,我是编码方面的新人。我需要在我的基于 java FXML 的应用程序中嵌入一种字体,但不知道该怎么做。我已将字体 fontName.ttf 粘贴到项目源代码根目录中的“资源”文件夹中,即 App/src/app/resources。我已将组件(文本)的 CSS 设置为

#text {
-fx-font-family: url(resources/fontName.ttf);
}

我也试过在 url 中添加引号,即 url("resources/fontName.ttf");,但它不起作用。我还为组件设置了 CSS id,所以这不是问题所在。还有其他工作方式吗?我看过http://fxexperience.com/2010/05/how-to-embed-fonts/ ,但它不起作用,因为我有 JDK 1.7 u21。对嵌入字体的正确方法有什么想法吗?

最佳答案

解决方法

我从 Javafx How to display custom font in webview? 更新了示例演示如何在使用 CSS 设置样式的 JavaFX 控件中使用自定义 True-Type 字体。

要点是:

  1. 将字体放置在与您的应用程序类相同的位置,并确保您的构建系统将其放置在您的二进制构建包(例如应用程序 jar 文件)中。
  2. 在应用使用它的样式之前,在 JavaFX 代码中加载代码字体。Font.loadFont(CustomFontApp.class.getResource("TRON.TTF").toExternalForm(), 10);
  3. 要在样式类中使用自定义字体,请使用 -fx-font-family css 属性并仅引用字体名称(例如,在本例中为 "TRON").
  4. 创建并加载定义样式类的样式表。
  5. 将样式类应用于您的控件。

附加信息

如果您使用的是 Java 8,您可能会对 Use web(Google) fonts in JavaFX 感兴趣.

字体集

如果您的字体文件是.ttc 格式,在一个文件中包含多种字体,那么使用Font.loadFonts API(而不是 Font.loadFont)。请注意,Font.loadFonts 仅在 JDK 9 之后可用,在早期版本中不可用。

使用自定义字体的示例输出

tronfonts

示例代码

该示例依赖于 TRON.TTF 字体,您可以从 dafont 下载该字体.

CustomFontApp.java

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.*;
import javafx.scene.layout.VBox;
import javafx.scene.text.*;
import javafx.stage.Stage;

// demonstrates the use of a custom font.
public class CustomFontApp extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) {
stage.setTitle("TRON Synopsis");

// load the tron font.
Font.loadFont(
CustomFontApp.class.getResource("TRON.TTF").toExternalForm(),
10
);

Label title = new Label("TRON");
title.getStyleClass().add("title");

Label caption = new Label("A sci-fi flick set in an alternate reality.");
caption.getStyleClass().add("caption");
caption.setMaxWidth(220);
caption.setWrapText(true);
caption.setTextAlignment(TextAlignment.CENTER);

VBox layout = new VBox(10);
layout.setStyle("-fx-padding: 20px; -fx-background-color: silver");
layout.setAlignment(Pos.CENTER);
layout.getChildren().setAll(
title,
new ImageView(
new Image(
"http://ia.media-imdb.com/images/M/MV5BMTY5NjM2MjAwOV5BMl5BanBnXkFtZTYwMTgyMzA5.V1.SY317.jpg"
)
),
caption
);

// layout the scene.
final Scene scene = new Scene(layout);
scene.getStylesheets().add(getClass().getResource("custom-font-styles.css").toExternalForm());
stage.setScene(scene);
stage.show();
}
}

自定义字体样式.css

/** file: custom-font-styles.css
* Place in same directory as CustomFontApp.java
*/

.title {
-fx-font-family: "TRON";
-fx-font-size: 20;
}

.caption {
-fx-font-family: "TRON";
-fx-font-size: 10;
}

关于 FXML 的使用

Font.loadFont(url, size)是一个带有两个参数的静态方法。我不认为你可以从 FXML 调用 font.loadFont 并且如果可以的话也不会建议它。相反,在加载需要字体的 FXML 或样式表之前,在 Java 代码中加载字体(正如我在回答中所做的那样)。

关于fonts - 如何在 JavaFx 2.2 中嵌入 .ttf 字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29114974/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com