Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Specifying external font in JavaFX CSS

Tags:

Is it possible to specify a font using CSS in JavaFX application? I have an FXML scene and the corresponding CSS file. In Java code, it's possible to specify a font using the setFont method:

text.setFont(Font.loadFont("file:resources/fonts/SourceSansPro-Bold.ttf", 12));

I tried different constructions, like:

-fx-font-family: url("../fonts/SourceSansPro-Bold.ttf");

But it doesn't work.

like image 272
syscreat Avatar asked Aug 29 '12 07:08

syscreat


People also ask

Can CSS be used in JavaFX?

CSS styles are applied to nodes in the JavaFX scene graph in a way similar to the way CSS styles are applied to elements in the HTML DOM. Styles are first applied to the parent, then to its children.


2 Answers

I use a combination of application code and CSS to style via an external font.

I place the loadFont call inside an overridden Application init method to make sure it is invoked before anything much happened in the application.

Font.loadFont(CustomFontTest.class.getResource("TRON.TTF").toExternalForm(), 10);

To use the font, I reference the font by font family in CSS:

.menu-bar {
    -fx-background-color: transparent;
    -fx-font-family: TRON;
    -fx-font-size: 40px;
}

.context-menu {
    -fx-font-family: TRON;
    -fx-background-color: transparent;
    -fx-font-size: 12px;
}

Nice that the CSS sizes the fonts fine. Even when the font is loaded at size 10, the font was resized correctly to what is specified in the CSS -fx-font-size specifications.

Inline styling of a label via CSS using a Font loaded during application initialization also works fine:

Label testControl = new Label("TRON");
testControl.setStyle("-fx-font-family: TRON; -fx-font-size: 120;");

The TRON font was downloaded from dafont and placed in the same directory as the CustomFontTest class and copied to the build output directory by the build system.

Answer copied from my answer to a forum post on "Using Custom Fonts".

like image 170
jewelsea Avatar answered Oct 01 '22 03:10

jewelsea


You were close to the solution:

-fx-font-family: 'Helvetica', Arial, sans-serif;

Try this, it should work fine.


Maybe this could help? (I'm not an expert in JavaFX)

https://forums.oracle.com/forums/thread.jspa?messageID=10107625


EDIT:

Load your font:

@font-face {
    font-family: Delicious;
    src: url('Delicious-Roman.otf');
}

Use your font with -fx-:

-fx-font-family: 'Delicious';
like image 43
Andrea Turri Avatar answered Oct 01 '22 03:10

Andrea Turri