Проход макета определяет положение и размер узлов в сцене.Эти этапы макета планируются 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
, который вы расширили, будет обновлять свойство.