父节点中的needsLayout属性的用途

时间:2019-02-13 02:40:26

标签: javafx javafx-8

有人可以让我知道“父”节点中“ needsLayout”属性的用途是什么,以及如何从中受益。我的印象是,使用isNeedsLayout()会告诉我该节点是否在场景图形中呈现。但是看起来并非如此。而且我也对父API中的描述感到困惑

  

needsLayout::指示此节点及其子节点需要一个   布局传递下一个脉冲。

高度赞赏有关此属性的任何帮助/说明。谢谢。

1 个答案:

答案 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的子类将负责更新属性。