Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx 父节点中needsLayout属性的用途_Javafx_Javafx 8 - Fatal编程技术网

Javafx 父节点中needsLayout属性的用途

Javafx 父节点中needsLayout属性的用途,javafx,javafx-8,Javafx,Javafx 8,有人能告诉我在父节点中“needsLayout”属性的用途是什么,以及我如何从中受益。我的印象是,使用isNeedsLayout()将告诉我节点是否在场景图中渲染。但看起来情况并非如此。我还对父API中的描述感到困惑 needsLayout:表示此节点及其子节点需要 在下一个脉冲上进行布局传递 非常感谢您对本物业的任何帮助/解释。谢谢。布局过程确定场景中节点的位置和大小。如果场景的更新以需要重新计算其祖先的大小的方式对其进行修改,则JavaFX会自动安排这些布局过程。布局过程不会立即执行,以避免

有人能告诉我在父节点中“needsLayout”属性的用途是什么,以及我如何从中受益。我的印象是,使用isNeedsLayout()将告诉我节点是否在场景图中渲染。但看起来情况并非如此。我还对父API中的描述感到困惑

needsLayout:表示此节点及其子节点需要 在下一个脉冲上进行布局传递


非常感谢您对本物业的任何帮助/解释。谢谢。

布局过程确定场景中节点的位置和大小。如果场景的更新以需要重新计算其祖先的大小的方式对其进行修改,则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
的子类将负责更新属性。

布局过程确定场景中节点的位置和大小。如果场景的更新以需要重新计算其祖先的大小的方式对其进行修改,则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
的子类将负责更新属性。

感谢您的解释。我试着用那个代码做了更多的跟踪,现在看来我已经了解了。再次感谢:)谢谢你的解释。我试着用那个代码做了更多的跟踪,现在看来我已经了解了。再次感谢:)