Назначение свойства needsLayout в родительском узле - PullRequest
0 голосов
/ 13 февраля 2019

Может кто-нибудь, пожалуйста, дайте мне знать, какова цель свойства needsLayout в родительском узле и как я могу извлечь из этого пользу.У меня сложилось впечатление, что использование isNeedsLayout () скажет мне, отображается ли узел в графе сцены или нет.Но похоже, что это не так.И меня также смущает описание в Parent API

needsLayout: Указывает, что этот узел и его подузлы требуют передачи макета для следующего импульса.

Любая помощь / объяснение в отношении этого имущества высоко ценится.Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2019

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

...