Solution Approach
tôi cập nhật mẫu từ Javafx How to display custom font in webview? để chứng minh sử dụng một sự thật kiểu phông chữ tùy chỉnh trong điều khiển JavaFX theo kiểu sử dụng CSS.
Những điểm mấu chốt là:
- Đặt phông chữ trong cùng một vị trí như lớp ứng dụng của bạn và đảm bảo nơi xây dựng hệ thống của bạn nó trong xây dựng nhị phân của bạn gói (ví dụ ứng dụng file jar).
- Tải phông chữ mã trong mã JavaFX của bạn trước khi bạn áp dụng một kiểu sử dụng nó.
Font.loadFont(CustomFontApp.class.getResource("TRON.TTF").toExternalForm(), 10);
- Để sử dụng phông chữ tùy chỉnh trong lớp kiểu sử dụng thuộc tính css
-fx-font-family
css và chỉ tham chiếu tên phông chữ (ví dụ: trong trường hợp này là "TRON"
).
- Tạo và tải biểu định kiểu xác định các lớp kiểu.
- Áp dụng các lớp kiểu cho các điều khiển của bạn.
Thông tin bổ sung
Nếu bạn đang sử dụng Java 8, bạn có thể quan tâm đến Use web(Google) fonts in JavaFX.
Sample Output Sử dụng Tuỳ chỉnh Font
Mẫu Mã
Ví dụ dựa trên một phông chữ TRON.TTF mà bạn có thể tải về từ 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();
}
}
tùy chỉnh font-styles.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;
}
On FXML Cách sử dụng
Font.loadFont(url, size) là một phương pháp tĩnh dùng hai tham số. Tôi không nghĩ rằng bạn có thể gọi font.loadFont từ FXML và sẽ không tư vấn cho nó nếu bạn có thể. Thay vào đó, tải phông chữ trong mã Java (như tôi đã làm trong câu trả lời của tôi) trước khi bạn tải bảng tính kiểu FXML hoặc kiểu yêu cầu phông chữ.
Lỗi đi lên và nói không thể tìm thấy biểu tượng: 'loadFont' trong lớp 'Font'. Ba số nhận dạng được mong đợi. (Tôi đã nhập phông chữ trong fxml là 'import javafx.scene.text.Font;') –
Đã thêm một phần về cách sử dụng FXML vào câu trả lời. – jewelsea
Lỗi xuất hiện. Xem tại đây: https://docs.google.com/document/d/1GSQeo8CHQhMEU_nS-gl6yWL1qQF4T08kYwPa_OELer4/edit?usp=sharing –