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
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 –