JavaFX CSS字体系列没有';t在Xubuntu 16.04中的标签控件上得到应用 问题

JavaFX CSS字体系列没有';t在Xubuntu 16.04中的标签控件上得到应用 问题,css,javafx,label,ubuntu-16.04,font-family,Css,Javafx,Label,Ubuntu 16.04,Font Family,大家好,我已经设置了下面的JavaFXCSS来处理标签控件,以显示我的计算器应用程序的总和 .label-sumtotal { -fx-font-family: "Noto Sans CJK SC Bold", Arial, sans-serif; -fx-text-fill: color-crimson; -fx-font-size: 32pt; -fx-font-weight: bold; } 这就是它在Windows和Xubuntu 14.04上的正确外观 这就是它在X

大家好,我已经设置了下面的JavaFXCSS来处理
标签
控件,以显示我的计算器应用程序的总和

.label-sumtotal {
  -fx-font-family: "Noto Sans CJK SC Bold", Arial, sans-serif;
  -fx-text-fill: color-crimson;
  -fx-font-size: 32pt;
  -fx-font-weight: bold;
}
这就是它在Windows和Xubuntu 14.04上的正确外观

这就是它在Xubuntu 16.04上的错误外观


到目前为止我在Xubuntu 16.04上测试的内容
  • 我改为Xubuntu 16.04中包含的另一个字体系列, 然而,
    标签
    仍然没有改变其字体系列和字体 字体权重

  • 但是当我将控件从
    标签
    更改为
    文本
    而不触摸时 任何CSS代码,然后不知何故字体家族得到识别和 应用


我的问题
如何使
标签
控件在Xubuntu 16.04上显示字体系列?我不想使用
文本
控件,因为它没有像
标签

那样的特定格式功能。我没有Ubuntu系统,但你可以尝试以下使用从web加载的Noto Sans SC粗体字体来设置标签样式,这种字体在Mac上对我很有效。我在Mac上的输出与您在Windows和Xubunto 14.04上所说的正确输出相同

Noto Sans SC Bold的Google web字体参考:

解决方案是从Google加载一种web字体,而不是依赖应用程序或操作系统中预先打包的字体

从web加载的字体版本被指定为Noto+Sans+SC:700,因此字体已经加粗,因此我在css中没有指定加粗,而是为-fx字体系列指定“Noto Sans SC bold”值。您还可以使用
-fx font-weight:bold,那么您可能会得到一个双黑体字体,一次来自字体本身,然后再次来自权重设置。在这个例子中,我有必要在家族中使用“Bold”一词,否则就找不到它(这与谷歌关于在标准HTML CSS中使用web字体的说明相反,后者不需要在名称中使用“Bold”)

您也可以从Google下载字体作为
.ttc
文件,并使用以下地址指定的解决方案从本地资源加载字体:

但是,我运行的JavaFX版本早于该功能工作所需的最低版本9,所以我没有尝试使用嵌入式字体

我知道,很可能,您的Xubuntu系统没有正确显示字体,它肯定已经在某个地方了(否则,当使用文本而不是标签时,它将无法正确显示字体)。但是,我不知道如何在您描述的情况下正确地选择标签的本地OS字体,这就是为什么我建议尝试使用webfont或嵌入式字体

示例CSS

Web字体示例应用程序


声明:“JavaFX CSS不支持-fx字体系列属性中以逗号分隔的字体系列名称。不支持指定字体时的可选行高参数。”。因此,可能是试图这样做混淆了系统。另外,
color crimson
不是一种有效的颜色,它应该是
crimson
。至于color crimson,我在CSS中这样声明它
color crimson:#dc143c。因此,我可以在CSS的其他部分重新使用
颜色深红
。至于“在-fx字体系列属性中以逗号分隔的字体系列名称”,我删除了其他字体,只保留了一种单独的字体。但仍然没有改善。我想知道JavaFX是如何以及从哪里获得默认字体系列的,可能是默认值一直覆盖了我的字体系列。运行以下命令:
System.out.println(String.join(“\n”,font.getFamilies())
要了解可用的字体系列,请阅读JavaFX源代码,如果您希望确切了解它是如何确定这些字体的(据我所知,它在任何地方都没有文档记录,并且实现将取决于平台)。您周到而全面的回答给我留下了深刻的印象。我会按照你的建议尝试将其用作webfont,并将我的结果发回。嵌入字体是毫无疑问的,因为它会将我已经很大的应用程序(150MB)的大小再增加10%。
.label-sumtotal {
    -fx-font-family: "Noto Sans SC Bold";
    -fx-text-fill: crimson;
    -fx-font-size: 32pt;
}
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class NotoFontApp extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Label label = new Label("5,40\u20AC");
        label.getStyleClass().add("label-sumtotal");

        Pane layout = new StackPane(label);
        layout.setPadding(new Insets(10));
        Scene scene = new Scene(layout);
        scene.getStylesheets().add(
                NotoFontApp.class.getResource("font.css").toURI().toURL().toExternalForm()
        );
        scene.getStylesheets().add(
                "https://fonts.googleapis.com/css?family=Noto+Sans+SC:700&display=swap"
        );

        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}