我读到了this关于如何实现这一点的老答案。但是,由于它涉及到使用impl_processCSS(boolean) (一种现在不再推荐的方法),我认为我们需要更新答案。
我试着把标签放在一个HBox中,然后得到它的大小,或者得到HBox的大小,没有任何结果。我也尝试过使用.label.getBoundsInLocal().getWidth()。
进口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();
}
}发布于 2015-06-22 16:37:42
从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
注意,我已经为Group更改了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
https://stackoverflow.com/questions/30983584
复制相似问题