Spec-Zone.ru › OpenJavaFX 24

Пакет javafx.scene.layout

package javafx.scene.layout

Предоставляет классы для поддержки макета пользовательского интерфейса. Каждый класс панели макета поддерживает различную стратегию макета для своих дочерних элементов, и приложения могут вкладывать эти панели макета, чтобы достичь необходимой структуры макета в пользовательском интерфейсе. После добавления узла на одну из панелей макета, панель автоматически будет управлять макетом узла, поэтому приложение не должно напрямую позиционировать или изменять размер узла; см. «Изменяемость узла» для получения дополнительной информации.

Механизм макета сцены

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

Изменяемость узла

Граф сцены поддерживает как изменяемые, так и неизменяемые классы узлов. isResizable() метод в Node возвращает, является ли данный узел изменяемым или нет. Изменяемый класс узла - это тот, который поддерживает диапазон допустимых размеров (минимум ≤ предпочтительный ≤ максимум), что позволяет родительскому элементу изменять его размер в этом диапазоне во время макета, с учетом собственной политики макета родительского элемента и потребностей в макете дочерних узлов. Узел поддерживает следующие методы для определения кодом макета диапазона изменяемости узла:


     public Orientation getContentBias()
     public double minWidth(double height)
     public double minHeight(double width)
     public double prefWidth(double height)
     public double prefHeight(double width)
     public double maxWidth(double height)
     public double maxHeight(double width)
 

С другой стороны, неизменяемые классы узлов не имеют согласованного API изменения размера, поэтому они не изменяются размером своими родителями во время макета. Приложения должны устанавливать размер неизменяемых узлов, задавая соответствующие свойства каждого экземпляра. Эти классы возвращают свои текущие пределы макета для мин, преф и макс, и resize() метод становится пустой операцией.


Изменяемые классы: Region, Control, WebView
Неизменяемые классы: Group, Shape, Text

Например, элемент управления Кнопка (изменяемый) вычисляет свои минимальные, предпочтительные и максимальные размеры, которые его родительский элемент будет использовать для изменения размера во время макета, поэтому приложению необходимо только настроить его содержимое и свойства:

    Button button = new Button("Apply");
 
Однако круг (неизменяемый) не может быть изменен размером своим родительским элементом, поэтому приложение должно установить соответствующие геометрические свойства, определяющие его размер:
    Circle circle = new Circle();
     circle.setRadius(50);
 

Диапазон изменяемости

Каждый изменяемый класс узла вычисляет соответствующий минимальный, предпочтительный и максимальный размер, основанный на собственном содержимом и настройках свойств (его «внутренний» диапазон размера). Некоторые изменяемые классы имеют неограниченный максимальный размер (все панели макета), в то время как у других максимальный размер по умолчанию ограничен их предпочтительным размером (кнопки) (см. документацию по отдельным классам для определения диапазона по умолчанию каждого класса). Хотя эти значения по умолчанию ориентированы на общее использование, приложениям часто необходимо явно изменить или установить диапазон изменяемости узла для достижения определенных макетов. Изменяемые классы предоставляют свойства для переопределения минимального, предпочтительного и максимального размеров для этой цели.

Например, чтобы переопределить предпочтительный размер ListView:

    listview.setPrefSize(200,300);
 

Или, чтобы изменить максимальную ширину кнопки, чтобы она увеличивалась в ширину для заполнения пространства:

    button.setMaxWidth(Double.MAX_VALUE);
 

В случае обратного случая, когда приложение должно ограничить минимальный или максимальный размер узла своим предпочтительным размером:

    listview.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);
 
И, наконец, если приложение должно восстановить вычисленные внутренние значения:
    listview.setPrefSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE);
 

Стиль CSS и размер узла

Приложения не могут надежно запросить границы изменяемого узла, пока он не будет добавлен в сцену, поскольку размер этого узла может зависеть от CSS. Это связано с тем, что CSS используется для стилизации многих аспектов узла, которые влияют на его предпочтительный размер (шрифт, отступы, границы и т. д.), и поэтому узел не может быть разложен (изменен размером), пока CSS не будет применен, и родительский элемент не сможет получить доступ к метрикам диапазона допустимого размера. Это всегда верно для элементов управления (и любых панелей, которые их содержат), потому что они полагаются на CSS для своего стилистического оформления по умолчанию, даже если пользовательские таблицы стилей не были заданы. Таблицы стилей задаются на уровне сцены, что означает, что стили не могут быть определены до инициализации сцены, содержащей узел. После инициализации сцены CSS применяется к узлам на каждом импульсе (при необходимости) непосредственно перед проходом макета.

Визуальные границы против границ макета

Графический богатый пользовательский интерфейс часто нуждается в том, чтобы различать визуальные границы узла и границы, используемые для макета. Например, строгие визуальные границы глифов символов узла Текст не подходят для макета, поскольку текст не будет выровнен, и отступы/приступы будут проигнорированы. Также иногда приложения хотят применить эффекты и преобразования к узлам, не нарушая окружающий макет (отскок, колебания, тени, свечения и т. д.). Для поддержки этого различия в графическом представлении, Node предоставляет свойство layoutBounds для определения «логических» границ узла для макета и boundsInParent для определения визуальных границ после применения всех эффектов, обрезки и преобразований.

Эти два свойства границ часто отличаются для данного узла, и layoutBounds вычисляется по-разному в зависимости от класса узла:

Таблица вычисления границ
Тип узла Границы макета
Shape,ImageView Включает геометрические границы (геометрия плюс штрих). Не включает эффект, обрезку или какие-либо преобразования.
Text логические границы, основанные на высоте шрифта и ширине содержимого, включая пробелы. может быть настроен на ограниченные границы вокруг глифов символов, задав boundsType. Не включает эффект, обрезку или какие-либо преобразования.
Region, Control, WebView всегда [0,0 width x height] независимо от визуальных границ, которые могут быть больше или меньше границ макета.
Group Объединение всех видимых визуальных границ дочерних элементов (boundsInParent). Не включает эффект, обрезку или преобразования, установленные непосредственно на группе, однако ВКЛЮЧАЕТ эффект, обрезку, преобразования, установленные на отдельных дочерних элементах, поскольку они включены в boundsInParent дочерних элементов.

Таким образом, например, если к форме добавлен DropShadow, эта тень не будет учитываться в макете по умолчанию. Или, если используется ScaleTransition для пульсации размера кнопки, эта анимация пульсации не будет нарушать макет вокруг этой кнопки. Если приложение хочет учесть эффект, обрезку или преобразование в макете узла, оно должно обернуть этот узел в Группу.

Пакет Описание
javafx.scene
Предоставляет основной набор базовых классов для API JavaFX Scene Graph.
Класс Описание
AnchorPane
AnchorPane позволяет привязывать края дочерних узлов к смещению от краев панели AnchorPane.
Background
Фон Region.
BackgroundFill
Заливка и связанные свойства, определяющие, как заполнять фон Region.
BackgroundImage
Определяет свойства, описывающие, как отобразить изображение в качестве фона для некоторых Region.
BackgroundPosition
Представляет положение BackgroundImage внутри области рисования Region.
BackgroundRepeat
Перечисление вариантов повторения изображений в фоновых изображениях
BackgroundSize
Определяет размер области, которую должно заполнять BackgroundImage относительно области Region, которую она стилизует.
Border
Граница Region.
BorderImage
Определяет свойства, описывающие, как отобразить изображение в качестве границы некоторой области Region.
BorderPane
BorderPane выкладывает дочерние элементы в позиции сверху, слева, справа, снизу и по центру.
BorderRepeat
Перечисление, указывающее правила повторения для изображений границы.
BorderStroke
Определяет штрих, используемый для Border для стилизации Region.
BorderStrokeStyle
Определяет стиль штриха, используемого на одной стороне BorderStroke.
BorderWidths
Определяет ширины для четырех компонентов (верх, право, низ, слева).
ColumnConstraints
Определяет необязательные ограничения разметки для столбца в GridPane.
ConstraintsBase
Базовый класс для определения узловых ограничений разметки.
CornerRadii
Определяет радиусы каждого из четырех углов BorderStroke.
FlowPane
FlowPane выкладывает свои дочерние элементы в поток, который обтекает границы FlowPane.
GridPane
GridPane выкладывает свои дочерние элементы внутри гибкой сетки строк и столбцов.
HBox
HBox выкладывает свои дочерние элементы в одной горизонтальной строке.
Pane
Базовый класс для панелей разметки, которые должны раскрывать список дочерних элементов как общедоступный, чтобы пользователи подкласса могли свободно добавлять/удалять дочерние элементы.
Priority
Перечисление, используемое для определения приоритета роста (или уменьшения) области разметки данного узла, когда его область имеет больше (или меньше) доступного пространства и несколько узлов конкурируют за это пространство.
Region
Region — это базовый класс для всех элементов управления пользовательским интерфейсом JavaFX, основанных на узлах, и всех контейнеров разметки.
RowConstraints
Определяет необязательные ограничения разметки для строки в GridPane.
StackPane
StackPane выкладывает свои дочерние элементы в стеке спереди назад.
TilePane
TilePane выкладывает свои дочерние элементы в сетке одинаково размерных «плиток».
VBox
VBox выкладывает свои дочерние элементы в одном вертикальном столбце.

Отправить сообщение об ошибке или предложить улучшение
Авторские права © 2008, 2025, Oracle и/или его аффилированные лица. Все права защищены.

© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API