Java FX с использованием 2 шрифтов для 2 языков

#css #javafx #fonts

#css #javafx #шрифты

Вопрос:

В моем приложении Java FX есть текст как на английском, так и на иврите, я хочу использовать Roboto для английского текста и Noto без иврита для текста на иврите.

Код, который я придумал, работает не так, как описано ниже, Code:

 // java
Parent root = new VBox() {{
    getChildren().addAll(
        new Label("THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG"),
        new Label("the quick brown fox jumps over the lazy dog"),
        new Label("השפן טעם ביס ואכל קצת גזר חד")
    );
}};
primaryStage.setScene(new Scene(root) {{
    getStylesheets().add(getClass().getResource("style.css").toExternalForm());
}});
primaryStage.show();


// style.css
@font-face {
    src: url('Roboto-Regular.ttf');
}
@font-face {
    src: url('NotoSansHebrew-Regular.ttf');
}
.root {
    /* Attempt 1 - it only takes the first one */
    -fx-font-family: "Roboto" "Noto Sans Hebrew";

    /* Attempt 2 - it only takes the last one */
    -fx-font-family: "Roboto";
    -fx-font-family: "Noto Sans Hebrew";
}
  

Комментарии:

1. Вам нужно настроить таргетинг на реальных пользователей Label . Это можно сделать, присвоив всем английским Label одному классу стилей, а всем ивритским Label — другому классу стилей. Чтобы добавить класс стиля, используйте Node.getStyleClass().add(...) . Затем используйте классы стилей в файле CSS.

2. Этот код является примером, в моем реальном приложении я не знаю, в каком Node из них есть какой язык.