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