我使用Pane
通过将某些Label
添加到其子级列表来打印它们。由于某种原因,我需要绑定标签宽度,但是当我做类似的事情时:
public class LabelTestApp extends Application
{
private Pane root = new Pane();
private Label myLabel = new Label("test");
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage stage)
{
root.getChildren.add(myLabel);
System.out.println(myLabel.widthProperty());
stage.setScene(new Scene(root, 500, 500);
stage.show();
}
}
Label
似乎没有更新其宽度。当我用:
System.out.println(myLabel.widthProperty());
我明白了:
ReadOnlyDoubleProperty [bean : Label@xxxxxxxx[styleClass = label]'test', name:width, value: 0.0]
所以我想,Label的宽度是在Layout期间计算的,并且由于Pane没有任何Layout Manager,因此永远不会计算出来,对吗?
如果是这样,我应该如何获得这个宽度?
否则,问题出在其他地方,我不知道在哪里。
有关信息:我需要使用窗格来绘制一些Shape
,并控制它们的位置。标签的目的是在形状上打印一些信息。我需要标签的宽度,因为它们在形状上有些Line
,并且我不希望它们越过标签。
请随时询问更多信息。
答案 0 :(得分:0)
JavaFX仅列出可见的组件。
如果尝试这样的操作,您会看到以下内容:
final Label myLabel = new Label("test");
final Pane myPane = new Pane(myLabel);
System.out.println(myLabel.getWidth());
stage.setScene(new Scene(myPane, 640, 480));
stage.show();
System.out.println(myLabel.getWidth());
可打印
0.0
19.5
如您在此处看到的,直到调用stage.show()
才设置标签的大小。您还可以覆盖Pane
来查看layoutChildren()
的首次调用。
作为旁注,如果您想找出某些文本的宽度而不在舞台上显示它,可以制作一个Text
节点(代替标签)并获取其首选宽度,例如>
new Text("test").prefWidth(0)
希望这会有所帮助!