JavaFX找不到所有系统字体
我注意到,我使用的JavaFX组件与Swing组件不同,没有正确呈现某些系统字体。下面是一个完整的例子来说明这个问题JavaFX找不到所有系统字体,java,javafx,fonts,Java,Javafx,Fonts,我注意到,我使用的JavaFX组件与Swing组件不同,没有正确呈现某些系统字体。下面是一个完整的例子来说明这个问题 public class JavaFXApplication1 extends Application { @Override public void start(Stage primaryStage) { // Swing button SwingNode node = new SwingNode(); Swin
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字体,您应该会看到以下结果。只有Swing组件看起来很好:
显然,FX图形系统不会在启动时加载所有系统字体。最明显的解决方案是手动加载缺失的,如下所示:
Font.loadFont(new FileInputStream(System.getenv("WINDIR")+"\\fonts\\"+"comic.ttf"), 20);
现在所有的东西都能正确渲染,但是这个解决方案不是跨平台的,我真的希望它能像Swing一样开箱即用。我错过什么了吗?如果不是,那么为什么只将系统字体的子集加载到JavaFX环境中
我正在Windows 10上运行它。我发现了另一件事:我创建了以下代码
String fonts[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); for(String font: fonts) { System.out.printf("This is font %s %n", font);
这返回例如:这是一种奇怪的字体(这是我下载并安装的字体),所以它是可用的。但当我把它写进这段代码时:
<GridPane fx:controller="sample.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"
style="-fx-font-family: Something Strange">
文本根本没有改变。也许这是你/我们问题的原因 我对此有点不确定,因为我无法在windows上复制您的问题,但这可能是特定于操作系统的,因为windows 7可能已经为java fx加载了Comic sans字体,但是您可以尝试font.getFontNames()看看有哪些字体可用,也许可以像awt@Dean219一样在循环中加载它们-谢谢,我忘了提到我在Windows10上运行过它。如果它能在Windows 7上运行,那么可能是操作系统特有的错误。它对我有效,对其他人可能无效,但我猜,由于你可以加载特定的系统字体,它可能只加载一些可用的字体,而不是每个可能存在问题的字体,也许如果windows 10有更多不同的字体,那么comic sans不是它加载的默认字体,因此它可能是windows 10上的一个可重新创建的问题,但是您应该尝试使用字体类打印可用的字体,查看它是否在列表中,并查看列表中是否有其他字体可以工作,而不专门调用它们。Ymm,既然这不是我问题的答案,我想你应该把它作为评论发布,或者保持原样,因为我们的问题已经被链接了。啊,好吧,你可以链接它,我不知道。很抱歉,我把它作为答案贴了出来。仍然习惯于堆栈溢出。