Solution approche
I mis à jour l'échantillon de Javafx How to display custom font in webview? à démontrer en utilisant une police de type vrai sur mesure dans les contrôles en utilisant le CSS JavaFX style.
Points clés sont les suivants:
- Placez la police dans le même endroit que votre classe d'application et d'assurer votre place de système de construire dans votre paquet build binaire (par exemple le fichier jar d'application).
- Chargez la police de code dans votre code JavaFX avant d'appliquer un style qui l'utilise. Pour utiliser la police personnalisée dans une classe de style, utilisez l'attribut css
-fx-font-family
et référencez simplement le nom de la police (dans ce cas, par exemple, "TRON"
).
- Créez et chargez une feuille de style qui définit les classes de style.
- Appliquez des classes de style à vos contrôles.
Informations supplémentaires
Si vous utilisez Java 8, vous pouvez être intéressé par Use web(Google) fonts in JavaFX.
Exemple de sortie utilisant une police personnalisée
Exemple de code
L'exemple repose sur une police TRON.TTF que vous pouvez télécharger à partir 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();
}
}
sur mesure 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;
}
Sur FXML Utilisation
Font.loadFont(url, size) est une méthode statique prenant deux paramètres. Je ne pense pas que vous pouvez invoquer la police.loadFont de FXML et ne le conseillerait pas si vous pouviez. Au lieu de cela, chargez la police dans le code Java (comme je l'ai fait dans ma réponse) avant de charger votre FXML ou feuille de style qui nécessite la police.
erreur vient et dit ne peut pas trouver le symbole: 'loadFont' dans la classe' Font'. Trois identificateurs sont attendus. (J'ai importé la police dans fxml en tant que 'import javafx.scene.text.Font;') –
Ajout d'une section sur l'utilisation de FXML à la réponse. – jewelsea
Une erreur se produit. Voir ici: https://docs.google.com/document/d/1GSQeo8CHQhMEU_nS-gl6yWL1qQF4T08kYwPa_OELer4/edit?usp=sharing –