Spec-Zone.ru › OpenJavaFX 8

Package javafx.scene.layout

Предоставляет классы для поддержки макета пользовательского интерфейса.

See: Описание

Краткое описание классов
Класс Описание
AnchorPane
AnchorPane позволяет привязывать края дочерних узлов к смещению от краев AnchorPane.
Background
Фоновый слой Region.
BackgroundFill
Заливка и связанные свойства, определяющие способ заливки фона Region.
BackgroundImage
Определяет свойства, описывающие отображение изображения в качестве фона для некоторого Region.
BackgroundPosition
Представляет положение BackgroundImage внутри области рисования Region.
BackgroundSize
Определяет размер области, которую BackgroundImage должна заполнить относительно Region, для которого она применяется.
Border
Граница Region.
BorderImage
Определяет свойства, описывающие отображение изображения в качестве рамки некоторого Region.
BorderPane
BorderPane размещает дочерние элементы в позициях сверху, слева, справа, снизу и по центру.
BorderStroke
Определяет обводку, используемую для границы Border при стилизации Region.
BorderStrokeStyle
Определяет стиль обводки для одной стороны BorderStroke.
BorderWidths
Определяет ширины для четырёх компонентов (верх, правый, низ, левый).
ColumnConstraints
Определяет необязательные параметры макета для столбца в GridPane.
ConstraintsBase
Базовый класс для определения ограничений макета, специфичных для узла.
CornerRadii
Определяет радиусы каждого из четырёх углов BorderStroke.
CornerRadiiConverter
Преобразует парсенное значение <size>{1,4} [ '/' <size>{1,4}]? [',' <size>{1,4} [ '/' <size>{1,4}]?]? в CornerRadii
FlowPane
FlowPane размещает дочерние элементы в потоке, который обтекает границы FlowPane.
GridPane
GridPane размещает дочерние элементы в гибкой сетке строк и столбцов.
HBox
HBox размещает дочерние элементы в одной горизонтальной строке.
Pane
Базовый класс для панелей макета, которым необходимо публично экспонировать список дочерних элементов, чтобы пользователи подкласса могли свободно добавлять/удалять дочерние элементы.
Region
Region — базовый класс для всех элементов управления интерфейсом пользователя на основе узлов JavaFX и всех контейнеров макета.
RowConstraints
Определяет необязательные параметры макета для строки в GridPane.
StackPane
StackPane размещает дочерние элементы в стеке «сзади-вперед».
TilePane
TilePane размещает дочерние элементы в сетке из одинаково размещенных «плиток».
VBox
VBox размещает дочерние элементы в одном вертикальном столбце.
Краткое описание перечислений
Перечисление Описание
BackgroundRepeat
Перечисление вариантов повторения изображений в фонах
BorderRepeat
Перечисление, указывающее правила повторения для изображений рамки.
Priority
Перечисление, используемое для определения приоритета роста (или уменьшения) области макета данного узла, когда его область имеет больше (или меньше) места, а несколько узлов конкурируют за это пространство.

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 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 применяется к узлам при каждом цикле (при необходимости) непосредственно перед проходом макета.

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

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

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

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

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

© 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