有人可以让我知道“父”节点中“ needsLayout”属性的用途是什么,以及如何从中受益。我的印象是,使用isNeedsLayout()会告诉我该节点是否在场景图形中呈现。但是看起来并非如此。而且我也对父API中的描述感到困惑
needsLayout::指示此节点及其子节点需要一个 布局传递下一个脉冲。
高度赞赏有关此属性的任何帮助/说明。谢谢。
答案 0 :(得分:2)
布局遍历确定场景中节点的位置和大小。如果场景的更新以需要重新计算其大小的方式对其进行了修改,则JavaFX会自动安排这些布局通过。不会立即执行布局遍历,以避免为连续修改而一遍又一遍地重新计算布局。
@Override
public void start(Stage primaryStage) throws IOException {
Button btn = new Button("click");
btn.setPrefWidth(60);
StackPane root = new StackPane(btn);
btn.setOnAction(evt -> {
System.out.println("before modification: " + root.isNeedsLayout());
btn.setPrefWidth(btn.getPrefWidth() + 1);
System.out.println("after modification: " + root.isNeedsLayout());
});
Scene scene = new Scene(root, 500, 500);
primaryStage.setScene(scene);
primaryStage.show();
}
在上面的示例中,当您单击按钮时,场景已经更新。布局遍历确定了按钮的位置并确定了按钮的大小。按钮事件处理程序更新按钮的prefWidth
属性,这可能会导致尺寸/布局更改,因此需要进行布局传递。当发生布局传递时,标志将被清除,只有在再次修改按钮之后,才需要进行新的布局传递。
通常,您无需理会此属性。您扩展的Parent
的子类将负责更新属性。