gpt4 book ai didi

JavaFX 未找到所有系统字体

转载 作者:行者123 更新时间:2023-12-02 07:59:08 25 4
gpt4 key购买 nike

我注意到我使用的 JavaFX 组件与 Swing 组件不同,无法正确呈现某些系统字体。这是呈现该问题的完整示例。

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 组件看起来不错:

Broken fonts

显然 FX 图形系统在启动时不会加载所有系统字体。最明显的解决方案是手动加载缺失的,如下所示:

Font.loadFont(new FileInputStream(System.getenv("WINDIR")+"\\fonts\\"+"comic.ttf"), 20);

现在一切都可以正确呈现,但是这个解决方案不是跨平台的,我真的希望它能够像在 Swing 中一样开箱即用。我错过了什么吗?如果没有,那么为什么只将系统字体的一个子集加载到 JavaFX 环境中?

我在 Windows 10 上运行它。

最佳答案

我发现了另一件事:我创建了以下代码

String fonts[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailab‌​leFontFamilyNames(); for(String font: fonts) { System.out.printf("This is font %s %n", font);

这会返回例如:This is font Something Strange(它是我下载并安装的字体),因此它可用。但是当我将其放入这段代码中时:

<GridPane fx:controller="sample.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"
style="-fx-font-family: Something Strange">

文本根本没有改变。也许这会导致您/我们的问题。

关于JavaFX 未找到所有系统字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38874722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com