Класс GroupLayout
- Все реализуемые интерфейсы:
LayoutManager, LayoutManager2
public class GroupLayout extends Object implements LayoutManager2
GroupLayout — это LayoutManager, который иерархически группирует компоненты для их позиционирования в Container. GroupLayout предназначен для использования визуальными конструкторами, но может быть написан и вручную. Группировка выполняется экземплярами класса Group.
GroupLayout поддерживает два типа групп. Последовательная группа размещает дочерние элементы последовательно, один за другим. Параллельная группа выравнивает дочерние элементы одним из четырех способов. Каждая группа может содержать любое количество элементов, где элементом является Group, Component или промежуток. Промежуток можно рассматривать как невидимый компонент с минимальным, предпочтительным и максимальным размером. Кроме того, GroupLayout поддерживает предпочтительный промежуток, значение которого берется из LayoutStyle.
Элементы подобны пружинам. Каждый элемент имеет диапазон, заданный минимальным, предпочтительным и максимальным значениями. Для промежутков диапазон задается разработчиком или определяется
LayoutStyle. Диапазон для Components определяется по методам getMinimumSize,
getPreferredSize и getMaximumSize объекта Component. Кроме того, при добавлении Components можно указать диапазон, который будет использоваться вместо диапазона компонента. Диапазон для
Group определяется типом группы. Диапазон ParallelGroup равен максимальному диапазону ее элементов. Диапазон
SequentialGroup равен сумме диапазонов ее элементов.
GroupLayout рассматривает каждую ось независимо. То есть одна группа представляет горизонтальную ось, а другая — вертикальную. Горизонтальная группа отвечает за определение минимального, предпочтительного и максимального размера вдоль горизонтальной оси, а также за установку координаты x и ширины содержащихся в ней компонентов. Вертикальная группа отвечает за определение минимального, предпочтительного и максимального размера вдоль вертикальной оси, а также за установку координаты y и высоты содержащихся в ней компонентов. Каждый Component должен присутствовать и в горизонтальной, и в вертикальной группе; в противном случае при компоновке или при запросе минимального, предпочтительного либо максимального размера возникает IllegalStateException.
На следующей диаграмме показана последовательная группа вдоль горизонтальной оси. Последовательная группа содержит три компонента. Вдоль вертикальной оси используется параллельная группа.
Чтобы подчеркнуть, что каждая ось рассматривается независимо, на диаграмме показан диапазон каждой группы и каждого элемента вдоль каждой оси. Диапазон каждого компонента проецируется на оси, а группы отображаются синим (горизонтальные) и красным (вертикальные) цветом. Для наглядности между элементами последовательной группы оставлены промежутки.
Последовательная группа вдоль горизонтальной оси изображена сплошной синей линией. Обратите внимание, что диапазон последовательной группы равен сумме диапазонов ее дочерних элементов.
Вдоль вертикальной оси диапазон параллельной группы равен максимальной высоте каждого из компонентов. Поскольку все три компонента имеют одинаковую высоту, высота параллельной группы такая же.
На следующей диаграмме показаны те же три компонента, но параллельная группа расположена вдоль горизонтальной оси, а последовательная — вдоль вертикальной.
Поскольку c1 — самый большой из трех компонентов, размер параллельной группы определяется размером c1. Так как c2 и c3 меньше, чем c1, их выравнивание определяется заданным для компонента выравниванием (если оно указано) или выравниванием параллельной группы по умолчанию. На диаграмме c2 и c3 созданы с выравниванием LEADING. Если бы ориентация компонентов была справа налево, c2 и c3 располагались бы с противоположной стороны.
На следующей диаграмме показана последовательная группа и вдоль горизонтальной, и вдоль вертикальной оси.
GroupLayout позволяет вставлять промежутки между Components. Размер промежутка определяется экземпляром 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);. - У
Groups нет открытых конструкторов; вместо этого используйте методы create классаGroupLayout.
- Начиная с версии:
- 1.6
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static enum |
GroupLayout.Alignment |
Перечисление возможных способов, которыми ParallelGroup может выравнивать дочерние элементы. |
class |
GroupLayout.Group |
Group служит основой для двух типов операций, поддерживаемых GroupLayout: размещения компонентов один за другим (SequentialGroup) или их выравнивания (ParallelGroup). |
class |
GroupLayout.ParallelGroup |
Group, который выравнивает и задает размеры дочерних элементов. |
final 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— если host равен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— еслиcomponentравенnull - См. также:
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— если group равенnull
setVerticalGroup
public void setVerticalGroup(GroupLayout.Group group)
Group, который располагает компоненты и задает их размеры вдоль вертикальной оси.- Параметры:
-
group—Group, который располагает компоненты и задает их размеры вдоль вертикальной оси - Исключения:
-
IllegalArgumentException— если group равен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— еслиalignmentравенnull - См. также:
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— еслиalignmentравенnull - См. также:
createBaselineGroup
public GroupLayout.ParallelGroup createBaselineGroup(boolean resizable, boolean anchorBaselineToTop)
ParallelGroup, выравнивающую элементы по базовой линии.- Параметры:
-
resizable— можно ли изменять размер группы -
anchorBaselineToTop— закреплена ли базовая линия у верхнего или нижнего края группы - Возвращает:
ParallelGroup- См. также:
linkSize
public void linkSize(Component... components)
Этот метод можно вызывать несколько раз, чтобы задать одинаковый размер любому количеству компонентов.
Размер связанных компонентов нельзя изменять.
- Параметры:
-
components—Components, которым нужно задать одинаковый размер - Исключения:
-
IllegalArgumentException— еслиcomponentsравенnullили содержитnull - См. также:
linkSize
public void linkSize(int axis, Component... components)
Этот метод можно вызывать несколько раз, чтобы задать одинаковый размер любому количеству компонентов.
Размер связанных Components нельзя изменять.
- Параметры:
-
axis— ось, вдоль которой связываются размеры; одно из значенийSwingConstants.HORIZONTALилиSwingConstants.VERTICAL -
components—Components, которым нужно задать одинаковый размер - Исключения:
-
IllegalArgumentException— еслиcomponentsравенnullили содержитnull; либо еслиaxisне равенSwingConstants.HORIZONTALилиSwingConstants.VERTICAL
replace
public void replace(Component existingComponent, Component newComponent)
- Параметры:
-
existingComponent— компонент, который следует удалить и заменить наnewComponent -
newComponent— компонент, который следует поместить на местоexistingComponent - Исключения:
-
IllegalArgumentException— если один из компонентов равенnullилиexistingComponentне управляется этим менеджером компоновки
setLayoutStyle
public void setLayoutStyle(LayoutStyle layoutStyle)
LayoutStyle, используемый для вычисления предпочтительных промежутков между компонентами. Значение null указывает, что следует использовать общий экземпляр LayoutStyle.- Параметры:
-
layoutStyle— используемыйLayoutStyle - См. также:
getLayoutStyle
public LayoutStyle getLayoutStyle()
LayoutStyle, используемый для вычисления предпочтительного промежутка между компонентами. Возвращается значение, заданное в setLayoutStyle, которое может быть null.- Возвращает:
LayoutStyle, используемый для вычисления предпочтительного промежутка между компонентами
addLayoutComponent
public void addLayoutComponent(String name, Component component)
Component в родительский контейнер. Не следует вызывать этот метод напрямую; вместо этого используйте один из методов Group для добавления Component.- Определено в:
-
addLayoutComponentв интерфейсеLayoutManager - Параметры:
-
name— строка, связываемая с компонентом -
component— добавляемыйComponent
removeLayoutComponent
public void removeLayoutComponent(Component component)
Component из родительского контейнера. Не следует вызывать этот метод напрямую; вместо этого вызовите remove у родительского Container.- Определено в:
-
removeLayoutComponentв интерфейсеLayoutManager - Параметры:
-
component— удаляемый компонент - См. также:
preferredLayoutSize
public Dimension preferredLayoutSize(Container parent)
- Определено в:
-
preferredLayoutSizeв интерфейсеLayoutManager - Параметры:
-
parent— контейнер, для которого возвращается предпочтительный размер - Возвращает:
- предпочтительный размер для
parent - Исключения:
-
IllegalArgumentException— еслиparentне совпадает сContainer, с которым был создан этот объект -
IllegalStateException— если какой-либо из компонентов, добавленных в эту компоновку, не входит одновременно в горизонтальную и вертикальную группы - См. также:
minimumLayoutSize
public Dimension minimumLayoutSize(Container parent)
- Определено в:
-
minimumLayoutSizeв интерфейсеLayoutManager - Параметры:
-
parent— контейнер, для которого возвращается размер - Возвращает:
- минимальный размер для
parent - Исключения:
-
IllegalArgumentException— еслиparentне совпадает сContainer, с которым был создан этот объект -
IllegalStateException— если какой-либо из компонентов, добавленных в эту компоновку, не входит одновременно в горизонтальную и вертикальную группы - См. также:
layoutContainer
public void layoutContainer(Container parent)
- Определено в:
-
layoutContainerв интерфейсеLayoutManager - Параметры:
-
parent— контейнер, для которого выполняется компоновка - Исключения:
-
IllegalStateException— если какой-либо из компонентов, добавленных в эту компоновку, не входит одновременно в горизонтальную и вертикальную группы
addLayoutComponent
public void addLayoutComponent(Component component, Object constraints)
Component в родительский контейнер. Не следует вызывать этот метод напрямую; вместо этого используйте один из методов Group для добавления Component.- Определено в:
-
addLayoutComponentв интерфейсеLayoutManager2 - Параметры:
-
component— добавленный компонент -
constraints— описание места размещения компонента
maximumLayoutSize
public Dimension maximumLayoutSize(Container parent)
- Определено в:
-
maximumLayoutSizeв интерфейсеLayoutManager2 - Параметры:
-
parent— контейнер, для которого возвращается размер - Возвращает:
- максимальный размер для
parent - Исключения:
-
IllegalArgumentException— еслиparentне совпадает сContainer, с которым был создан этот объект -
IllegalStateException— если какой-либо из компонентов, добавленных в эту компоновку, не входит одновременно в горизонтальную и вертикальную группы - См. также:
getLayoutAlignmentX
public float getLayoutAlignmentX(Container parent)
- Определено в:
-
getLayoutAlignmentXв интерфейсеLayoutManager2 - Параметры:
-
parent—Container, содержащий этотLayoutManager - Возвращает:
- выравнивание; эта реализация возвращает
.5 - Исключения:
-
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
© 1993, 2025, 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/25/docs/api/java.desktop/javax/swing/GroupLayout.html