T.M. SoftStudio

feci quod potui, faciant meliora potentes

Класс Pane

Класс Pane расширяет класс Region и является базовым классом для классов, представляющих панели компоновки.

Подклассами класса Pane являются следующие классы:

  • AnchorPane – компонует дочерний узел относительно сторон панели с учетом смещения.

  • BorderPane – компонует дочерние узлы в верхней, нижней, правой, левой и центральной части панели.

  • FlowPane – компонует дочерние узлы в ряды или столбцы.

  • GridPane – компонует дочерние узлы в табличку.

  • HBox – компонует дочерние узлы в один ряд.

  • StackPane – компонует дочерние узлы в слои по оси Z, где первый узел лежит в основании стека, а последний узел – в вершине стека.

  • TextFlow - компонует узлы Text.

  • TilePane – компонует дочерние узлы в таблицу с одинаковыми ячейками.

  • VBox – компонует дочерние узлы в один столбец.

Сам класс Pane обеспечивает абсолютное позиционирование дочерних узлов и в процессе компоновки только подгоняет размеры дочерних узлов под их предпочтительные размеры, не изменяя их позиций. При компоновке самой панели Pane ее предпочтительные размеры рассчитываются как размеры, достаточные для включения в панель ее дочерних узлов.

При добавлении узла в панель компоновки, он сразу автоматически компонуется в соответствии с механизмом компоновки данной панели. Сам механизм компоновки запускается автоматически при развертывании приложения и создания сцены, содержащей панель компоновки.

В процессе работы приложения, как только граф сцены обнаруживает изменение состояния узлов, влияющее на компоновку, он вызывает метод requestLayout(). Метод requestLayout() маркирует измененную ветвь графа сцены как требующую компоновки при генерации следующего события Pulse, инициирующего вызов метода layout() корневого узла ветви. Метод layout() осуществляет нисходящую компоновку дочерних узлов ветви, в процессе которой производится цепочка вызовов методов layoutChildren() родительских узлов для компоновки дочерних узлов.

Как уже упоминалось, компоновка пытается подогнать размеры узлов под их предпочтительные размеры. Однако размеры изменяются только у тех узлов, метод isResizable() которых возвращает true.

Классы узлов с изменяемыми размерами – это классы Region, Control, WebView, а классы узлов с неизменяемыми размерами – это классы Group, Shape, Text.

Класс Pane имеет, помимо унаследованных от класса Region, конструкторы public Pane() и public Pane(Node... children), а также метод public ObservableList<Node> getChildren(), возвращающий список дочерних узлов панели.