如何在JavaFX Label上查找应用的字体?

时间:2016-08-18 17:43:01

标签: css javafx label stylesheet

如果文本不适合标签的边界,我需要自动调整JavaFX标签上的字体大小。我在网上发现了一些很棒的代码(这里是Resize JavaFX Label if overrun),但问题是代码需要字体大小和参数。看起来确定字体大小非常简单,但Label.getFont()返回默认设置,因为我的应用程序使用css来设置字体大小。我的css将字体大小设置为30,但到目前为止我所知道的如何查看标签的所有内容都返回默认设置为12。

所以我试着查一下,但我不知道在哪里寻找它。 Label.getStyle()返回一个空字符串。 getCSSMetaData()返回一大堆有趣的设置,我能够在那里找到字体并查看子属性,但它再次存储了字体大小12的默认值和不同的样式名称。

这是我使用的样式表文件中的设置,所以我知道我需要找到反馈卡和字体大小:

._Feedback_Card {
-fx-font-size: 30px;
-fx-font-weight: bold;
-fx-text-fill: rgba(0,0,0,.9);
-fx-background-color: white;
-fx-border-color: white;
-fx-border-width: 0;
-fx-alignment: center;
-fx-text-alignment: center;
-fx-font-family: Arial Unicode MS;
-fx-effect: dropshadow(gaussian, #b4b4b4, 6,0,0,2);
}

不要被名称所左右,代码中的其他位置的映射会以某种方式将此组件映射到该类名称。它是由同事写的,所以我不知道确切的机制。但考虑到这个名称,我尝试在根节点上查找区域:

Region node =     (Region)jsLayoutCollection.jsDisplayLayoutCollection.fGetFXParent().lookup("._Feedback_Card");
String sStream = node.getCssMetaData().stream()

然后我查看了流的字体属性。但是这又返回了字体,但是大小是默认的12,而不是样式表设置的30。

那么这个属性在哪里被应用?我该如何查找它?似乎应该直截了当地弄清楚这些信息,但我无法找到它。使用以下方法设置字体非常容易:

 Label.setStyle("-fx-font-size: " + fontSize + "px");

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

一旦标签的场景(或父级)加载了样式表,并且已经应用​​了CSS,5将返回CSS设置的字体。

此代码:

getFont()

import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class GetCSSFont extends Application { @Override public void start(Stage primaryStage) { Label label = new Label("Big label"); StackPane root = new StackPane(label); Scene scene = new Scene(root); scene.getStylesheets().add("set-font.css"); System.out.println("Default font: "+label.getFont()); label.applyCss(); System.out.println("Font from CSS: "+label.getFont()); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }

set-font.css

产生输出:

.label {
    /* Note the font family needs quoting if it has spaces: */
    -fx-font-family: 'Arial Unicode MS' ;
    -fx-font-size: 30px ;
    -fx-font-weight: bold ;
}

.root {
    -fx-padding: 20 ;
}

(当然,您可以使用Default font: Font[name=System Regular, family=System, style=Regular, size=13.0] Font from CSS: Font[name=Arial Unicode MS, family=Arial Unicode MS, style=Regular, size=30.0] 获得磅值。)