Класс GroupLayout
- Все реализуемые интерфейсы:
LayoutManager, LayoutManager2
public class GroupLayout extends Object implements LayoutManager2
GroupLayout — это LayoutManager, которое иерархически группирует компоненты для их размещения в Container. GroupLayout предназначен для использования средствами автоматической генерации кода, но его также можно создавать вручную. Группировка выполняется экземплярами класса Group.
GroupLayout поддерживает два типа групп. Последовательная группа размещает дочерние элементы последовательно, один за другим. Параллельная группа выравнивает дочерние элементы одним из четырёх способов. Каждая группа может содержать любое количество элементов, где элементом является Group, Component или промежуток. Промежуток можно рассматривать как невидимый компонент с минимальным, предпочтительным и максимальным размером. Кроме того, GroupLayout поддерживает предпочтительный промежуток, значение которого определяется LayoutStyle.
Элементы подобны пружинам. Каждый элемент имеет диапазон, заданный минимальным, предпочтительным и максимальным значениями. Для промежутков диапазон задаётся разработчиком или определяется
LayoutStyle. Диапазон для Components определяется методами Component's getMinimumSize,
getPreferredSize и getMaximumSize. Кроме того, при добавлении 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. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного промежутка реального времени. |
Подробное описание полей
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—Component, которым следует задать одинаковый размер - Исключения:
-
IllegalArgumentException— еслиcomponentsравенnullили содержитnull - См. также:
linkSize
public void linkSize(int axis, Component... components)
Этот метод можно использовать несколько раз, чтобы задать одинаковый размер для любого количества компонентов.
Размеры связанных Component изменять нельзя.
- Параметры:
-
axis— ось, вдоль которой связываются размеры; одно из значенийSwingConstants.HORIZONTALилиSwingConstants.VERTICAL -
components—Component, которым следует задать одинаковый размер - Исключения:
-
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 в родительский контейнер. Не следует вызывать этот метод напрямую; вместо этого для добавления Component следует использовать один из методов Group.- Определено в:
-
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 в родительский контейнер. Не следует вызывать этот метод напрямую; вместо этого для добавления Component следует использовать один из методов Group.- Определено в:
-
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, содержащий этот LayoutManager - Исключения:
-
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.