Класс GroupLayout
- Все реализованные интерфейсы:
-
LayoutManager,LayoutManager2
public class GroupLayout extends Object implements LayoutManager2
GroupLayout — это LayoutManager, который иерархически группирует компоненты для их позиционирования в Container. GroupLayout предназначен для использования с помощью билдеров, но также может быть реализован вручную. Группировка выполняется с помощью экземпляров класса Group.
GroupLayout поддерживает два типа групп. Последовательная группа позиционирует свои дочерние элементы последовательно, один за другим. Параллельная группа выравнивает свои дочерние элементы одним из четырёх способов. Каждая группа может содержать любое количество элементов, где элемент — это Group, Component, или разрыв. Разрыв можно рассматривать как невидимый компонент с минимальным, предпочтительным и максимальным размером. Кроме того, GroupLayout поддерживает предпочтительный разрыв, значение которого берётся из LayoutStyle.
Элементы подобны пружинам. Каждый элемент имеет диапазон, как указано минимальным, предпочтительным и максимальным размерами. У разрывов либо задан диапазон разработчиком, либо определён
LayoutStyle. Диапазон для Component определяется методами Component's getMinimumSize,
getPreferredSize и getMaximumSize. Кроме того, при добавлении Component можно указать определённый диапазон вместо диапазона компонента. Диапазон для
Group определяется типом группы. Диапазон ParallelGroup — это максимальный из диапазонов его элементов. Диапазон
SequentialGroup — это сумма диапазонов его элементов.
GroupLayout обрабатывает каждую ось независимо. То есть, существует группа, представляющая горизонтальную ось, и группа, представляющая вертикальную ось. Горизонтальная группа отвечает за определение минимального, предпочтительного и максимального размера по горизонтали, а также за установку координаты x и ширины содержащихся в ней компонентов. Вертикальная группа отвечает за определение минимального, предпочтительного и максимального размера по вертикали, а также за установку координаты y и высоты содержащихся в ней компонентов. Каждый Component должен существовать как в горизонтальной, так и в вертикальной группе, в противном случае при разметке или запросе минимального, предпочтительного или максимального размера будет выброшено исключение IllegalStateException .
На следующем рисунке показана последовательная группа по горизонтальной оси. Последовательная группа содержит три компонента. По вертикальной оси использовалась параллельная группа.
Чтобы подчеркнуть, что каждая ось обрабатывается независимо, на диаграмме показан диапазон каждой группы и каждого элемента вдоль каждой оси. Диапазон каждого компонента был спроецирован на оси, а группы отображены синим цветом (горизонталь) и красным (вертикаль). Для большей наглядности между элементами последовательной группы оставлен зазор.
Последовательная группа по горизонтальной оси отображается как сплошная синяя линия. Обратите внимание, что последовательная группа равна сумме содержащихся в ней дочерних элементов.
По вертикальной оси параллельная группа равна максимуму высоты каждого компонента. Поскольку все три компонента имеют одинаковую высоту, параллельная группа также имеет одинаковую высоту.
На следующем рисунке показаны те же три компонента, но с параллельной группой по горизонтали и последовательной группой по вертикали.
Так как c1 является наибольшим из трёх компонентов, размер параллельной группы устанавливается в c1. Поскольку c2 и c3 меньше c1, они выравниваются в соответствии с указанным для компонента выравниванием (если оно указано) или по умолчанию для параллельной группы. На диаграмме c2 и c3 были созданы с выравниванием LEADING. Если ориентация компонента была бы справа налево, c2 и c3 были бы расположены с противоположной стороны.
На следующем рисунке показана последовательная группа по обеим осям (горизонтали и вертикали).
GroupLayout предоставляет возможность вставлять разрывы между Component. Размер разрыва определяется экземпляром LayoutStyle. Это можно включить с помощью метода setAutoCreateGaps. Аналогично, вы можете использовать метод setAutoCreateContainerGaps для вставки разрывов между компонентами, которые примыкают к краю родительского контейнера и самому контейнеру.
Следующий пример создаёт панель, содержащую две метки в одном столбце, за которыми следуют два текстовых поля во втором столбце:
JComponent panel = ...;
GroupLayout layout = new GroupLayout(panel);
panel.setLayout(layout);
// Turn on automatically adding gaps between components
layout.setAutoCreateGaps(true);
// Turn on automatically creating gaps between components that touch
// the edge of the container and the container.
layout.setAutoCreateContainerGaps(true);
// Create a sequential group for the horizontal axis.
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
// The sequential group in turn contains two parallel groups.
// One parallel group contains the labels, the other the text fields.
// Putting the labels in a parallel group along the horizontal axis
// positions them at the same x location.
//
// Variable indentation is used to reinforce the level of grouping.
hGroup.addGroup(layout.createParallelGroup().
addComponent(label1).addComponent(label2));
hGroup.addGroup(layout.createParallelGroup().
addComponent(tf1).addComponent(tf2));
layout.setHorizontalGroup(hGroup);
// Create a sequential group for the vertical axis.
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
// The sequential group contains two parallel groups that align
// the contents along the baseline. The first parallel group contains
// the first label and text field, and the second parallel group contains
// the second label and text field. By using a sequential group
// the labels and text fields are positioned vertically after one another.
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
addComponent(label1).addComponent(tf1));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
addComponent(label2).addComponent(tf2));
layout.setVerticalGroup(vGroup);
При запуске получится следующее.
Эта разметка состоит из следующего.
- Горизонтальная ось состоит из последовательной группы, содержащей две параллельные группы. Первая параллельная группа содержит метки, а вторая — текстовые поля.
- Вертикальная ось состоит из последовательной группы, содержащей две параллельные группы. Параллельные группы настроены на выравнивание своих компонентов по базовой линии. Первая параллельная группа содержит первую метку и первое текстовое поле, а вторая группа содержит вторую метку и второе текстовое поле.
- Не нужно явно добавлять компоненты в контейнер; это делается косвенно с помощью одного из методов
addклассаGroup. - Различные методы
addвозвращают вызывающий объект. Это позволяет легко использовать цепочку вызовов. Например,group.addComponent(label1).addComponent(label2);эквивалентноgroup.addComponent(label1); group.addComponent(label2);. - Нет публичных конструкторов для
Group; вместо этого используйте методы создания в классеGroupLayout.
- С:
- 1.6
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static enum |
GroupLayout.Alignment |
Перечисление возможных способов выравнивания дочерних элементов ParallelGroup. |
class |
GroupLayout.Group |
Group предоставляет основу для двух типов операций, поддерживаемых GroupLayout: выравнивание компонентов один за другим (SequentialGroup) или по заданному направлению (ParallelGroup). |
class |
GroupLayout.ParallelGroup |
Класс Group, который выравнивает и задаёт размеры своих дочерних элементов. |
class |
GroupLayout.SequentialGroup |
Класс Group, который позиционирует и задаёт размеры своих элементов последовательно, один за другим. |
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
DEFAULT_SIZE |
Указывает, что для данного диапазона значений следует использовать размер компонента или промежутка. |
static final int |
PREFERRED_SIZE |
Указывает, что для данного диапазона значений следует использовать предпочтительный размер компонента или промежутка. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
GroupLayout |
Создаёт GroupLayout для указанного Container. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
addLayoutComponent |
Уведомление о добавлении Component в родительский контейнер. |
void |
addLayoutComponent |
Уведомление о добавлении Component в родительский контейнер. |
GroupLayout.ParallelGroup |
createBaselineGroup |
Создаёт и возвращает ParallelGroup, который выравнивает свои элементы по базовой линии. |
GroupLayout.ParallelGroup |
createParallelGroup() |
Создаёт и возвращает ParallelGroup с выравниванием Alignment.LEADING. |
GroupLayout.ParallelGroup |
createParallelGroup |
Создаёт и возвращает ParallelGroup с указанным выравниванием. |
GroupLayout.ParallelGroup |
createParallelGroup |
Создаёт и возвращает ParallelGroup с указанным выравниванием и поведением при изменении размера. |
GroupLayout.SequentialGroup |
createSequentialGroup() |
Создаёт и возвращает SequentialGroup. |
boolean |
getAutoCreateContainerGaps() |
Возвращает true, если промежутки между контейнером и компонентами, примыкающими к границе контейнера, создаются автоматически. |
boolean |
getAutoCreateGaps() |
Возвращает true, если промежутки между компонентами создаются автоматически. |
boolean |
getHonorsVisibility() |
Возвращает, учитывается ли видимость компонентов при определении размеров и позиционировании компонентов. |
float |
getLayoutAlignmentX |
Возвращает выравнивание по оси X. |
float |
getLayoutAlignmentY |
Возвращает выравнивание по оси Y. |
LayoutStyle |
getLayoutStyle() |
Возвращает LayoutStyle, используемый для расчёта предпочтительного промежутка между компонентами. |
void |
invalidateLayout |
Обнуляет компоновку, указывая, что если менеджер компоновки кэшировал информацию, её следует игнорировать. |
void |
layoutContainer |
Выполняет компоновку указанного контейнера. |
void |
linkSize |
Принудительно задаёт одинаковый размер указанным компонентам по заданной оси, независимо от их предпочтительных, минимальных или максимальных размеров. |
void |
linkSize |
Принудительно задаёт одинаковый размер указанным компонентам, независимо от их предпочтительных, минимальных или максимальных размеров. |
Dimension |
maximumLayoutSize |
Возвращает максимальный размер для указанного контейнера. |
Dimension |
minimumLayoutSize |
Возвращает минимальный размер для указанного контейнера. |
Dimension |
preferredLayoutSize |
Возвращает предпочтительный размер для указанного контейнера. |
void |
removeLayoutComponent |
Уведомление об удалении Component из родительского контейнера. |
void |
replace |
Заменяет существующий компонент новым. |
void |
setAutoCreateContainerGaps |
Устанавливает, следует ли автоматически создавать промежутки между контейнером и компонентами, которые касаются границы контейнера. |
void |
setAutoCreateGaps |
Устанавливает, следует ли автоматически создавать промежутки между компонентами. |
void |
setHonorsVisibility |
Устанавливает, учитывается ли видимость компонентов при определении размеров и позиционировании компонентов. |
void |
setHonorsVisibility |
Устанавливает, учитывается ли видимость компонента при определении размера и позиционировании. |
void |
setHorizontalGroup |
Устанавливает Group для позиционирования и задания размеров компонентов по горизонтали. |
void |
setLayoutStyle |
Устанавливает LayoutStyle для расчёта предпочтительных промежутков между компонентами. |
void |
setVerticalGroup |
Устанавливает Group для позиционирования и задания размеров компонентов по вертикали. |
String |
toString() |
Возвращает строковое представление этого GroupLayout. |
Подробное описание полей
DEFAULT_SIZE
public static final int DEFAULT_SIZE
- См. также:
PREFERRED_SIZE
public static final int PREFERRED_SIZE
- См. также:
Подробное описание конструкторов
GroupLayout
public GroupLayout(Container host)
GroupLayout для указанного Container. - Параметры:
-
host-Container, для которогоGroupLayoutявляетсяLayoutManagerдля - Исключения:
-
IllegalArgumentException- если хостnull
Подробное описание методов
setHonorsVisibility
public void setHonorsVisibility(boolean honorsVisibility)
true указывает, что невидимые компоненты не должны рассматриваться как часть макета. Значение false указывает, что компоненты должны быть позиционированы и размещены независимо от видимости. Значение false полезно, когда видимость компонентов динамически изменяется, и вы не хотите, чтобы окружающие компоненты и размер изменялись.
Указанное значение используется для компонентов, у которых нет явной видимости.
По умолчанию true.
- Параметры:
-
honorsVisibility- учитывается ли видимость компонента при определении размеров и позиционировании компонентов - См. также:
getHonorsVisibility
public boolean getHonorsVisibility()
- Возвращает:
- учитывается ли видимость компонента при определении размеров и позиционировании компонентов
setHonorsVisibility
public void setHonorsVisibility(Component component, Boolean honorsVisibility)
Boolean.TRUE указывает, что если component не виден, он не должен рассматриваться как часть макета. Значение false указывает, что component позиционируется и размещается независимо от его видимости. Значение null указывает, что должно использоваться значение, указанное методом с одним аргументом
setHonorsVisibility. Если component не является дочерним элементом Container этот GroupLayout управляет, он будет добавлен к Container.
- Параметры:
-
component- компонент -
honorsVisibility- учитывается ли видимость этогоcomponentпри определении размеров и позиционирования - Исключения:
-
IllegalArgumentException- еслиcomponentnull - См. также:
setAutoCreateGaps
public void setAutoCreateGaps(boolean autoCreatePadding)
true и вы добавляете два компонента в SequentialGroup, то промежуток между двумя компонентами будет автоматически создан. По умолчанию false.- Параметры:
-
autoCreatePadding- создается ли автоматически промежуток между компонентами
getAutoCreateGaps
public boolean getAutoCreateGaps()
true если промежутки между компонентами создаются автоматически.- Возвращает:
-
trueесли промежутки между компонентами создаются автоматически
setAutoCreateContainerGaps
public void setAutoCreateContainerGaps(boolean autoCreateContainerPadding)
false.- Параметры:
-
autoCreateContainerPadding- создается ли автоматически промежуток между контейнером и компонентами, которые соприкасаются с границами контейнера
getAutoCreateContainerGaps
public boolean getAutoCreateContainerGaps()
true если промежутки между контейнером и компонентами, которые граничат с контейнером, создаются автоматически.- Возвращает:
-
trueесли промежутки между контейнером и компонентами, которые граничат с контейнером, создаются автоматически
setHorizontalGroup
public void setHorizontalGroup(GroupLayout.Group group)
Group, который позиционирует и размещает компоненты по горизонтали.- Параметры:
-
group-Group, который позиционирует и размещает компоненты по горизонтали - Исключения:
-
IllegalArgumentException- если группаnull
setVerticalGroup
public void setVerticalGroup(GroupLayout.Group group)
Group, который позиционирует и размещает компоненты по вертикали.- Параметры:
-
group-Group, который позиционирует и размещает компоненты по вертикали - Исключения:
-
IllegalArgumentException- если группаnull
createSequentialGroup
public GroupLayout.SequentialGroup createSequentialGroup()
SequentialGroup.- Возвращает:
- новый
SequentialGroup
createParallelGroup
public GroupLayout.ParallelGroup createParallelGroup()
ParallelGroup с выравниванием Alignment.LEADING. Это метод-обёртка для более общего метода createParallelGroup(Alignment). - Возвращает:
- новый
ParallelGroup - См. также:
createParallelGroup
public GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment)
ParallelGroup с указанным выравниванием. Это метод-обёртка для более общего метода
createParallelGroup(Alignment,boolean) с true, предоставленным для второго аргумента.- Параметры:
-
alignment- выравнивание элементов группы - Возвращает:
- новый
ParallelGroup - Исключения:
-
IllegalArgumentException- еслиalignmentnull - См. также:
createParallelGroup
public GroupLayout.ParallelGroup createParallelGroup(GroupLayout.Alignment alignment, boolean resizable)
ParallelGroup с указанным выравниванием и поведением изменения размера. Аргумент
alignment определяет, как позиционируются дочерние элементы, которые не заполняют группу. Например, если
ParallelGroup с выравниванием TRAILING задано 100, а ребёнку требуется только 50, ребёнок позиционируется в позиции 50 (с ориентацией компонента слева направо). Выравнивание по базовой линии полезно только при использовании по вертикальной оси. ParallelGroup , созданный с выравниванием по базовой линии по горизонтали, обрабатывается как LEADING.
Подробнее о поведении групп по базовой линии см. в ParallelGroup.
- Параметры:
-
alignment- выравнивание элементов группы -
resizable-trueесли группа изменяет размер; если группа не изменяет размер, для минимального и максимального размера группы используется предпочтительный размер - Возвращает:
- новый
ParallelGroup - Исключения:
-
IllegalArgumentException- еслиalignmentnull - См. также:
createBaselineGroup
public GroupLayout.ParallelGroup createBaselineGroup(boolean resizable, boolean anchorBaselineToTop)
ParallelGroup, который выравнивает свои элементы по базовой линии.- Parameters:
-
resizable- является ли группа изменяемой по размеру -
anchorBaselineToTop- привязана ли базовая линия к верхней или нижней части группы - Returns:
- созданный
ParallelGroup - See Also:
linkSize
public void linkSize(Component... components)
Это можно использовать несколько раз для принудительного установления одинакового размера для любого количества компонентов.
Связанные компоненты не изменяются по размеру.
- Parameters:
-
components-Componentы, которые должны иметь одинаковый размер - Throws:
-
IllegalArgumentException- еслиcomponentsnull, или содержитnull - See Also:
linkSize
public void linkSize(int axis, Component... components)
Это можно использовать несколько раз для принудительного установления одинакового размера для любого количества компонентов.
Связанные Componentы не изменяются по размеру.
- Parameters:
-
axis- ось, по которой связывается размер; один изSwingConstants.HORIZONTALилиSwingConstants.VERTICAL -
components-Componentы, которые должны иметь одинаковый размер - Throws:
-
IllegalArgumentException- еслиcomponentsnull, или содержитnull; илиaxisнеSwingConstants.HORIZONTALилиSwingConstants.VERTICAL
replace
public void replace(Component existingComponent, Component newComponent)
- Parameters:
-
existingComponent- компонент, который нужно удалить и заменить наnewComponent -
newComponent- компонент, который нужно поместить на местоexistingComponent - Throws:
-
IllegalArgumentException- если любой из компонентов являетсяnullилиexistingComponentне управляется этим менеджером компоновки
setLayoutStyle
public void setLayoutStyle(LayoutStyle layoutStyle)
LayoutStyle, используемый для расчёта предпочтительных промежутков между компонентами. Значение null указывает на использование общего экземпляра LayoutStyle. - Parameters:
-
layoutStyle- используемыйLayoutStyle - See Also:
getLayoutStyle
public LayoutStyle getLayoutStyle()
LayoutStyle, используемый для расчёта предпочтительного промежутка между компонентами. Это возвращает значение, заданное для setLayoutStyle, которое может быть null. - Returns:
- используемый
LayoutStyleдля расчёта предпочтительного промежутка между компонентами
addLayoutComponent
public void addLayoutComponent(String name, Component component)
Component в контейнер-родитель. Не нужно вызывать этот метод напрямую, вместо этого используйте один из методов Group для добавления Component.- Specified by:
-
addLayoutComponentв интерфейсеLayoutManager - Parameters:
-
name- строка, которая будет ассоциирована с компонентом -
component- добавляемыйComponent
removeLayoutComponent
public void removeLayoutComponent(Component component)
Component из контейнера-родителя. Не нужно вызывать этот метод напрямую, вместо этого вызовите remove для родительского Container.- Specified by:
-
removeLayoutComponentв интерфейсеLayoutManager - Parameters:
-
component- удаляемый компонент - See Also:
preferredLayoutSize
public Dimension preferredLayoutSize(Container parent)
- Specified by:
-
preferredLayoutSizeв интерфейсеLayoutManager - Parameters:
-
parent- контейнер, для которого требуется предпочтительный размер - Returns:
- предпочтительный размер для
parent - Throws:
-
IllegalArgumentException- еслиparentне совпадает сContainerс которым был создан данный объект -
IllegalStateException- если любой из добавленных компонентов не принадлежит и горизонтальной, и вертикальной группе - See Also:
minimumLayoutSize
public Dimension minimumLayoutSize(Container parent)
- Specified by:
-
minimumLayoutSizeв интерфейсеLayoutManager - Parameters:
-
parent- контейнер, для которого требуется размер - Returns:
- минимальный размер для
parent - Throws:
-
IllegalArgumentException- еслиparentне совпадает сContainerс которым был создан данный объект -
IllegalStateException- если любой из добавленных компонентов не принадлежит и горизонтальной, и вертикальной группе - See Also:
layoutContainer
public void layoutContainer(Container parent)
- Specified by:
-
layoutContainerв интерфейсеLayoutManager - Parameters:
-
parent- контейнер, который необходимо разместить - Throws:
-
IllegalStateException- если любой из добавленных компонентов не принадлежит и горизонтальной, и вертикальной группе
addLayoutComponent
public void addLayoutComponent(Component component, Object constraints)
Component в контейнер-родитель. Не нужно вызывать этот метод напрямую, вместо этого используйте один из методов Group для добавления Component.- Specified by:
-
addLayoutComponentв интерфейсеLayoutManager2 - Parameters:
-
component- добавленный компонент -
constraints- описание местоположения компонента
maximumLayoutSize
public Dimension maximumLayoutSize(Container parent)
- Specified by:
-
maximumLayoutSizeв интерфейсеLayoutManager2 - Parameters:
-
parent- контейнер, для которого требуется максимальный размер - Returns:
- максимальный размер для
parent - Throws:
-
IllegalArgumentException- еслиparentне совпадает сContainerс которым был создан данный объект -
IllegalStateException- если любой из добавленных компонентов не принадлежит и горизонтальной, и вертикальной группе - See Also:
getLayoutAlignmentX
public float getLayoutAlignmentX(Container parent)
- Specified by:
-
getLayoutAlignmentXв интерфейсеLayoutManager2 - Parameters:
-
parent- контейнер, содержащий этотLayoutManager - Returns:
- выравнивание; данная реализация возвращает
.5 - Throws:
-
IllegalArgumentException- еслиparentне совпадает сContainerс которым был создан данный объект
getLayoutAlignmentY
public float getLayoutAlignmentY(Container parent)
- Определено в:
-
getLayoutAlignmentYв интерфейсеLayoutManager2 - Параметры:
-
parent-Container, содержащий этотLayoutManager - Возвращает:
- выравнивание; эта реализация возвращает
.5 - Исключения:
-
IllegalArgumentException- еслиparentне совпадает сContainer, с которым был создан этот объект
invalidateLayout
public void invalidateLayout(Container parent)
- Определено в:
-
invalidateLayoutв интерфейсеLayoutManager2 - Параметры:
-
parent-Container, содержащий этот компоновщик - Исключения:
-
IllegalArgumentException- еслиparentне совпадает сContainer, с которым был создан этот объект
toString
public String toString()
GroupLayout. Этот метод предназначен для отладки, и содержимое и формат возвращаемой строки могут различаться в разных реализациях.- Переопределяет:
-
toStringв классеObject - Возвращает:
- строковое представление этого
GroupLayout
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.desktop/javax/swing/GroupLayout.html