Spec-Zone .ru
спецификации, руководства, описания, API
JavaFX 8.0

Пакет javafx.scene.layout

Обеспечивает классы, чтобы поддерживать расположение пользовательского интерфейса.

См.: Описание

Пакет javafx.scene.layout Описание

Обеспечивает классы, чтобы поддерживать расположение пользовательского интерфейса. Каждая область class расположения поддерживает различную стратегию расположения своих дочерних элементов, и приложения могут вложить эти области расположения, чтобы достигнуть необходимой структуры расположения в пользовательском интерфейсе. Как только узел добавляется к одной из областей расположения, область будет автоматически управлять расположением для узла, таким образом, приложение не должно будет расположить или изменить размеры узла непосредственно; см. "Узел Resizability" для большего количества деталей.

Механизм Расположения Графика сцены

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

Узел Resizability

График сцены поддерживает и классы узла неизменяемого размера и изменяемого размера. isResizable() метод на Node возвраты, изменяемого размера ли данный узел или нет. class узла изменяемого размера является тем, который поддерживает диапазон приемлемых размеров (минимум <= preferred <= maximum), allowing its parent to resize it within that range during layout, given the parent's own layout policy and the layout needs of sibling nodes. Node supports the following methods for layout code to determine a node's resizable range:

    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);

Диапазон изменяемого размера

Каждый class узла изменяемого размера вычисляет соответствующую минуту, приставку, и максимальный размер, основанный на его собственном контенте и настройках свойства (это - 'внутренний' диапазон размера). У некоторых классов изменяемого размера есть неограниченный максимальный размер (все области расположения), в то время как у других есть максимальный размер, который фиксируется по умолчанию к их привилегированному размеру (кнопки) (См. отдельную документацию class для диапазона значения по умолчанию каждого class). В то время как эти значения по умолчанию приспосабливаются к общему пользованию, приложения часто должны явно изменять или устанавливать диапазон узла изменяемого размера, чтобы достигнуть определенных разметок. Классы изменяемого размера обеспечивают свойства для того, чтобы они переопределили минуту, приставку и максимальные размеры с этой целью.

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

    listview.setPrefSize(200,300);

Или, чтобы изменить максимальный width кнопки, таким образом, это изменит размеры шире, чтобы заполнить пространство:

    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 используется, чтобы разработать много аспектов узла, которые влияют, он предпочел размер (шрифт, дополнение, границы, и т.д.) и таким образом, узел не может быть layed, (измененным), пока CSS не был применен, и родитель может получить доступ к допустимым метрикам диапазона размера. Это всегда - истина для Средств управления (и любые области, которые содержат их), потому что они полагаются на CSS для своего стиля значения по умолчанию, даже если никакие таблицы стилей на уровне пользователя не были установлены. Таблицы стилей устанавливаются на уровне Сцены, что означает, что стили не могут даже быть определены, пока сцена включения узла не была инициализирована. Как только Сцена инициализируется, CSS применяется к узлам на каждом импульсе (при необходимости) как раз перед передачей расположения.

Визуальные Границы по сравнению с Границами Расположения

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

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

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

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

JavaFX 8.0

Copyright (c) 2008, 2013, Oracle и/или его филиалы. Все права защищены. Использование подвергается срокам действия лицензии.