soluzione metodo
ho aggiornato il campione da Javafx How to display custom font in webview? per dimostrare con un vero e proprio tipo di carattere personalizzato nei controlli JavaFX stile usando CSS.
I punti chiave sono:
- Posizionare il carattere nella stessa posizione come la classe di applicazione e garantire i vostri posti di sistema costruirlo nel vostro pacchetto build binario (per esempio applicazione file jar).
- Caricare il carattere del codice nel codice JavaFX prima di applicare uno stile che lo utilizza.
Font.loadFont(CustomFontApp.class.getResource("TRON.TTF").toExternalForm(), 10);
- Per utilizzare il carattere personalizzato in una classe di stile, utilizzare l'attributo css
-fx-font-family
e fare semplicemente riferimento al nome del carattere (ad esempio in questo caso "TRON"
).
- Creare e caricare un foglio di stile che definisce le classi di stile.
- Applica classi di stile ai tuoi controlli.
Informazioni aggiuntive
Se si utilizza Java 8, si può essere interessati a Use web(Google) fonts in JavaFX.
Output di esempio che utilizza un carattere personalizzato
![tronfonts](https://i.stack.imgur.com/IrkIT.png)
codice di esempio
L'esempio si basa su un tipo di carattere TRON.TTF che può essere scaricato da 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();
}
}
custom-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;
}
Su FXML Uso
Font.loadFont(url, size) è un metodo statico prendendo due parametri. Non penso che tu possa invocare font.loadFont da FXML e non lo consiglierei se poteste. Invece, carica il font in codice Java (come ho fatto nella mia risposta) prima di caricare il tuo FXML o foglio di stile che richiede il font.
errore si avvicina e dice che non riesce a trovare il simbolo: 'loadFont' in classe' Font'. Sono previsti tre identificatori. (Ho importato font in fxml come 'import javafx.scene.text.Font;') –
Aggiunta una sezione sull'uso FXML alla risposta. – jewelsea
Errore. Guardalo qui: https://docs.google.com/document/d/1GSQeo8CHQhMEU_nS-gl6yWL1qQF4T08kYwPa_OELer4/edit?usp=sharing –