2013-05-31 6 views
16

Premièrement, je suis un nouveau type dans le codage. J'ai besoin d'intégrer une police dans mon application javaFXML et je ne sais pas comment faire. J'ai collé la police, fontName.ttf dans un dossier "resources" à la racine des sources de mon projet, à savoir App/src/app/resources. J'ai mis le CSS pour le composant (texte) commeComment intégrer les polices .ttf est JavaFx 2.2?

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

J'ai aussi essayé d'ajouter des guillemets dans l'url, soit url("resources/fontName.ttf");, mais il ne fonctionne pas. J'ai également mis l'identification de css pour le composant, ainsi ce ne peut pas être le problème. Y a-t-il un autre moyen de le faire? J'ai vu http://fxexperience.com/2010/05/how-to-embed-fonts/, mais cela ne fonctionne pas puisque j'ai jdk 1.7 u21. Des idées pour une façon correcte d'intégrer des polices?

Répondre

31

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:

  1. 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).
  2. 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").
  3. Créez et chargez une feuille de style qui définit les classes de style.
  4. 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

tronfonts

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.

+0

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;') –

+1

Ajout d'une section sur l'utilisation de FXML à la réponse. – jewelsea

+0

Une erreur se produit. Voir ici: https://docs.google.com/document/d/1GSQeo8CHQhMEU_nS-gl6yWL1qQF4T08kYwPa_OELer4/edit?usp=sharing –

10

je sais que vous n'avez pas demandé d'une manière programmatique pure pour utiliser une police TTF personnalisé dans une application fx java, mais je pensais que peut-être il aide quelqu'un pour voir une version programmatique:

public class Test2 extends Application { 

    public static void main(String[] args) { 
    launch(args); 
    } 

    public void start(final Stage primaryStage) { 
    Group rootGroup = new Group(); 

    // create a label to show some text 
    Label label = new Label("Demo Text"); 
    try { 
     // load a custom font from a specific location (change path!) 
     // 12 is the size to use 
     final Font f = Font.loadFont(new FileInputStream(new File("./myFonts/TRON.TTF")), 12); 
     label.setFont(f); // use this font with our label 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

    rootGroup.getChildren().add(label); 

    // create scene, add root group and show stage 
    Scene scene = new Scene(rootGroup, 640, 480, Color.WHITE); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
    } 
} 

qui a fait la travail pour moi. vous pouvez placer la police où vous voulez juste vous assurer que vous adaptez le chemin.

vous pouvez trouver beaucoup plus sur using fonts inside java fx apps here.

HTH

Questions connexes