Задание внешнего шрифта в JavaFX CSS

Можно ли указать шрифт с помощью CSS в приложении JavaFX? У меня есть сценарий FXML и соответствующий файл CSS. В коде Java можно указать шрифт с помощью метода setFont:

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

Я пробовал разные конструкции, например:

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

но это не сработает.

Ответ 1

Вы были близки к решению:

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

Попробуйте, это должно работать нормально.


Может, это может помочь? (Я не эксперт в JavaFX)

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


ИЗМЕНИТЬ

Загрузите свой шрифт:

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

Используйте свой шрифт с помощью -fx-:

-fx-font-family: 'Delicious';

Ответ 2

Я использую комбинацию кода приложения и CSS для стилей с помощью внешнего шрифта.

Я помещаю вызов loadFont внутри переопределенного метода инициализации приложения, чтобы убедиться, что он вызывается до того, как что-то многое произошло в приложении.

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

Чтобы использовать шрифт, я ссылаюсь на шрифт по семейству шрифтов в 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;
}

Приятно, что CSS размер шрифтов штраф. Даже когда шрифт загружен с размером 10, шрифт был правильно изменен на то, что указано в спецификациях CSS -fx-font-size.

Встроенный стиль ярлыка через CSS с помощью Font, загружаемого во время инициализации приложения, также отлично работает:

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

шрифт TRON был загружен из dafont и помещен в тот же каталог, что и класс CustomFontTest, и скопирован в каталог вывода сборки системой сборки.

Ответ скопирован из моего ответа на сообщение в форуме на "Использование пользовательских шрифтов" .

Ответ 3

Только что выяснила еще одну деталь: В JavaFX-8, если вы хотите иметь обычные и полужирные варианты одного и того же шрифта, вы можете указать их с двумя экземплярами @font-face. Затем вы можете использовать -fx-font-weight: bold;

@font-face {
    font-family: 'Droid Sans';
    src: url('DroidSans.ttf');
}

@font-face {
    font-family: 'Droid Sans Bold';
    src: url('DroidSans-Bold.ttf');
}

.root {
    -fx-font-family: 'Droid Sans'; 
}

.table-row-cell:focused .text {
    -fx-font-weight: bold;
}

Ответ 4

Другой способ - загрузить шрифт с помощью FileIUnputStream, поэтому вам не нужно использовать css:

 @FXML
    private Label myLabel;

@Override
    public void initialize(URL arg0, ResourceBundle arg1){

Font myFont = null;

        try {
            myFont = Font.loadFont(new FileInputStream(new File("patch_to_font.ttf")), 10);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        myLabel.setFont(myFont);

}