gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:12 25 4
gpt4 key购买 nike

如果文本不完全适合标签的边界,我需要自动调整 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");

非常感谢任何帮助。

最佳答案

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

这段代码:

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]

(当然,您可以使用 double size = label.getFont().getSize() 获取磅值。)

关于css - 如何在JavaFX Label上查找应用的字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39024440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com