Класс GroupLayout
- Все реализованные интерфейсы:
-
LayoutManager,LayoutManager2
public class GroupLayout extends Object implements LayoutManager2
GroupLayout — это LayoutManager, иерархически группирующий компоненты для их размещения в Container. GroupLayout предназначен для использования билдерами, но также может быть реализован вручную. Группировка выполняется экземплярами класса Group.
GroupLayout поддерживает два типа групп. Последовательная группа размещает свои дочерние элементы последовательно, один за другим. Параллельная группа выравнивает свои дочерние элементы одним из четырёх способов. Каждая группа может содержать любое количество элементов, где элемент — это Group, Component или разрыв. Разрыв можно представить как невидимый компонент с минимальным, предпочтительным и максимальным размером. Кроме того, GroupLayout поддерживает предпочтительный разрыв, значение которого берётся из LayoutStyle.
Элементы подобны пружинам. Каждый элемент имеет диапазон, заданный минимальным, предпочтительным и максимальным размерами. У разрывов либо задаётся диапазон разработчиком, либо он определяется
LayoutStyle. Диапазон для Component определяется методами Component,
getPreferredSize и getMaximumSize компонента. Кроме того, при добавлении Component можно указать конкретный диапазон вместо диапазона компонента. Диапазон для
Group определяется типом группы. Диапазон для ParallelGroup — это максимальный из диапазонов его элементов. Диапазон для
SequentialGroup — это сумма диапазонов его элементов.
GroupLayout обрабатывает каждую ось независимо. То есть, существует группа, представляющая горизонтальную ось, и группа, представляющая вертикальную ось. Горизонтальная группа отвечает за определение минимального, предпочтительного и максимального размера по горизонтали, а также за установку координаты x и ширины содержащихся в ней компонентов. Вертикальная группа отвечает за определение минимального, предпочтительного и максимального размера по вертикали, а также за установку координаты y и высоты содержащихся в ней компонентов. Каждый Component должен существовать как в горизонтальной, так и в вертикальной группе, иначе при вычислении размеров (layout) или запросе минимального, предпочтительного или максимального размера будет выбрасываться 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, который выравнивает и задаёт размеры своих дочерних элементов. |
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- если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.
- Parameters:
-
alignment- выравнивание элементов группы -
resizable-true, если группа изменяет размер; если группа не изменяет размер, для минимального и максимального размера группы используется предпочтительный размер - Returns:
- новая
ParallelGroup - Throws:
-
IllegalArgumentException- еслиalignmentявляетсяnull - See Also:
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- компоненты, которые должны иметь одинаковый размер - Throws:
-
IllegalArgumentException- еслиcomponentsявляетсяnullили содержитnull - See Also:
linkSize
public void linkSize(int axis, Component... components)
Это можно использовать несколько раз для принудительного задания одинакового размера любому количеству компонентов.
Связанные Component не изменяют свой размер.
- Parameters:
-
axis- ось, вдоль которой принудительно задаётся размер; одно изSwingConstants.HORIZONTALилиSwingConstants.VERTICAL -
components- компоненты, которые должны иметь одинаковый размер - Throws:
-
IllegalArgumentException- еслиcomponentsявляетсяnullили содержит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- описание места размещения компонента
максимальныйРазмерМакет
public Dimension maximumLayoutSize(Container parent)
- Указано в:
-
maximumLayoutSizeв интерфейсеLayoutManager2 - Параметры:
-
parent- контейнер, для которого нужно вернуть размер - Возвращает:
- максимальный размер для
parent - Использует:
-
IllegalArgumentException- еслиparentне совпадает сContainer, с которым был создан этот объект -
IllegalStateException- если какой-либо из компонентов, добавленных в этот макет, не находится как в горизонтальной, так и в вертикальной группе - См. также:
выравниваниеМакетX
public float getLayoutAlignmentX(Container parent)
- Указано в:
-
getLayoutAlignmentXв интерфейсеLayoutManager2 - Параметры:
-
parent- контейнер, содержащий этотLayoutManager - Возвращает:
- выравнивание; данная реализация возвращает
.5 - Использует:
-
IllegalArgumentException- еслиparentне совпадает сContainer, с которым был создан этот объект
выравниваниеМакетY
public float getLayoutAlignmentY(Container parent)
- Указано в:
-
getLayoutAlignmentYв интерфейсеLayoutManager2 - Параметры:
-
parent- контейнер, содержащий этотLayoutManager - Возвращает:
- выравнивание; данная реализация возвращает
.5 - Использует:
-
IllegalArgumentException- еслиparentне совпадает сContainer, с которым был создан этот объект
отменитьМакет
public void invalidateLayout(Container parent)
- Указано в:
-
invalidateLayoutв интерфейсеLayoutManager2 - Параметры:
-
parent- контейнер, содержащий этот менеджер макета - Использует:
-
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://download.java.net/java/early_access/jdk24/docs/api/java.desktop/javax/swing/GroupLayout.html