Я заметил, что компоненты JavaFX, которые я использую, в отличие от их Swing-аналогов, не обеспечивают правильную работу некоторых системных шрифтов. Вот полный пример, который представляет проблему.JavaFX не находит все системные шрифты
public class JavaFXApplication1 extends Application {
@Override
public void start(Stage primaryStage) {
// Swing button
SwingNode node = new SwingNode();
SwingUtilities.invokeLater(() -> {
JButton swingButton = new JButton("Comic Sans MS");
swingButton.setFont(new java.awt.Font("Comic Sans MS", java.awt.Font.PLAIN, 20));
node.setContent(swingButton);
});
// JavaFX button
Button fxButton = new Button("Comic Sans MS");
fxButton.setFont(Font.font("Comic Sans MS", 20));
HBox hbox = new HBox();
hbox.getChildren().addAll(node, fxButton);
Scene scene = new Scene(hbox, 300, 250);
primaryStage.setTitle("Font test");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Если у вас есть шрифт Comic Sans MS в вашей системе, вы должны увидеть следующий результат. Только компонент Свинг выглядит отлично:
Видимо система FX графика не загружает все системные шрифты при запуске. Наиболее очевидным решением является загрузка недостающие вручную, как это:
Font.loadFont(new FileInputStream(System.getenv("WINDIR")+"\\fonts\\"+"comic.ttf"), 20);
Теперь все делает правильно, но это решение не является кросс-платформенный и я действительно ожидаю, что это работать вне в- как и в Swing. Я что-то упускаю? Если нет, то почему в среду JavaFX загружается только подмножество системных шрифтов?
Я бегу это на Windows, 10.
Я немного не уверен в этом, так как мне не удалось реплицировать вашу проблему на окнах, однако это может быть специфично для ОС, поскольку Windows 7 может уже иметь шрифт Comic-sans, доступный для java-fx при загрузке, однако вы можете попробовать Font. getFontNames() и посмотреть, какие шрифты доступны и, возможно, загрузить их в цикле аналогично этому для awt http://www.java2s.com/Tutorial/Java/0261__2D-Graphics/Togetallavailablefontsinyoursystem.htm – D3181
@ Dean219 - спасибо, Я забыл упомянуть, что я запускаю его в Windows 10. Если он работает в Windows 7, возможно, это ошибка конкретной ОС. – Dth
Ну, это сработало для меня, это может быть не для других, но я бы предположил, что, поскольку вы можете загружать определенные системные шрифты, он может загружать только некоторые из доступных, а не каждый шрифт, который может быть проблемой, может быть, если в Windows 10 будут более разнообразные шрифты то комикс sans не является шрифтом по умолчанию, который он загружает, поэтому он может быть воссоздаваемой проблемой в Windows 10, но вы должны попробовать распечатать, какие шрифты доступны с помощью класса Font и посмотреть, есть ли в списке, и посмотреть, есть ли другие, которые находятся на список, который работает без специального вызова. – D3181