繁体   English   中英

JavaFX找不到所有系统字体

[英]JavaFX not finding all system fonts

我注意到,我使用的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组件看起来不错:

字体损坏

显然,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);

例如,这返回:这是字体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">

文本完全不变。 也许这有助于您/我们的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM