【问题标题】:How to get the size of a label before it is laid out?如何在布局之前获取标签的大小?
【发布时间】:2015-09-08 02:51:26
【问题描述】:

我阅读了 this 关于如何完成此任务的旧答案。但由于它涉及使用impl_processCSS(boolean),这是一种现已弃用的方法,我认为我们需要更新答案。

我尝试将标签放在 HBox 中,然后获取它的大小,或者获取 HBox 的大小,但没有任何运气。而且我也尝试过使用 .label.getBoundsInLocal().getWidth()。

SSCCE: 导入 javafx.scene.control.Label; 导入 javafx.scene.layout.HBox; 导入 javafx.application.Application; 导入javafx.scene.Scene;

public class SSCCE extends Application{

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

    @Override
    public void start(Stage primaryStage) {
        HBox root = new HBox();
        Label label = new Label("foo");
        System.out.println(label.getWidth());

        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

【问题讨论】:

标签: javafx label size


【解决方案1】:

从 JavaFX 8 开始,您正在寻找的方法是 applyCss()

正如 JavaDoc 所述:

将样式应用于此节点及其子节点(如果有)。此方法通常不需要直接调用,但可以与 Parent.layout() 结合使用,以在下一个脉冲之前或场景不在舞台中时调整节点的大小。

所以你需要在容器中有节点,并且这个节点已经在现场,并且还要调用layout()

@Override
public void start(Stage primaryStage) {
    Group root = new Group();
    Label label = new Label("foo bla bla");
    root.getChildren().add(label);
    Scene scene = new Scene(root);

    root.applyCss();
    root.layout();
    System.out.println(label.getWidth());

    primaryStage.setScene(scene);
    primaryStage.show();

}

作为输出:17.818359375

请注意,我已将 HBox 更改为 Group,因为:

一个组将在布局过程中将其托管的可调整大小的子项“自动调整大小”为他们喜欢的大小,以确保区域和控件在其状态更改时正确调整大小

如果您使用HBox,您还需要设置场景的尺寸:

@Override
public void start(Stage primaryStage) {
    HBox root = new HBox();
    Label label = new Label("foo");
    root.getChildren().add(label);
    Scene scene = new Scene(root,100,20);

    root.applyCss();
    root.layout();
    System.out.println(label.getWidth());

    primaryStage.setScene(scene);
    primaryStage.show();

}

现在输出是:18.0

【讨论】:

  • 谢谢。这很有帮助!但是有没有办法在不将组放入场景的情况下做到这一点?我问是因为在我的情况下,我需要使用getChildren().add(Node) 将组添加到SkinBase 子类。可悲的是,Scene 对象不是Node。只是将Group 对象放入一个虚拟的Scene 中然后不使用它也不起作用..
  • 答案在我问题的评论部分。我刚刚计算了String的像素宽度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
相关资源
最近更新 更多