【发布时间】:2016-12-25 18:04:12
【问题描述】:
如果文本不完全适合标签的边界,我需要自动调整 JavaFX 标签上的字体大小。我在网上找到了一些很棒的代码(这里Resize JavaFX Label if overrun)来做到这一点,但问题是代码需要字体大小和作为参数。确定字体大小似乎很容易,但 Label.getFont() 返回默认设置,因为我的应用程序使用 css 来设置字体大小。我的 css 将字体大小设置为 30,但到目前为止,我已经弄清楚如何在 Label 上查找的所有内容都返回默认设置 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");
非常感谢任何帮助。
【问题讨论】:
标签: css javafx label stylesheet