JavaFX CSS字体系列没有';t在Xubuntu 16.04中的标签控件上得到应用 问题
大家好,我已经设置了下面的JavaFXCSS来处理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
标签
控件,以显示我的计算器应用程序的总和
.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字体参考:
-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);
}
}