Задание внешнего шрифта в 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);
}