有没有办法确定已经附加到场景但设置为不可见的节点的边界(特别是高度和宽度)?
我想在屏幕上显示一个标签,只要它的宽度超过100px ......但它始终为0:
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 500, 500, Color.BLACK);
primaryStage.setScene(scene);
primaryStage.show();
Label n = new Label();
n.setVisible(false);
n.setStyle("-fx-background-color: red;");
root.getChildren()
.addAll(n);
n.textProperty()
.addListener((v, ov, nv) -> {
System.out.println(n.getBoundsInParent());
n.setVisible(n.getWidth() > 100);
});
n.setText("TEST11111111111111111111111");
}
sysout的结果:(也是n.getWidth()不是更好)
BoundingBox [minX:0.0,minY:0.0,minZ:0.0,width:0.0,height:0.0,depth:0.0,maxX:0.0,maxY:0.0,maxZ:0.0]
有诀窍吗?
全部谢谢!
答案 0 :(得分:0)
您的问题是您正在侦听text属性的更改并希望在那时更新节点的宽度 - 但事实并非如此。节点的宽度仅在渲染过程中计算和设置,渲染过程由applyCSS和布局例程组成(请参阅:Get the height of a node in JavaFX (generate a layout pass))。在计算节点的更新大小之前,您的代码错误地将节点设置为不可见。
我建议您使用绑定表达式在visibility属性上创建对所需width属性的直接绑定,而不是在text属性上使用侦听器来确定节点的可见性。下面提供了这种方法的一个例子。您可以看到标签仅在要显示的文本长于所需宽度(在本例中为100像素)时显示。
hasBLSComp