Используя отступы, вы можете точно контролировать расстояние между компонентами или от границы контейнера.
Метод setAutoCreateGaps устанавливает, должен ли автоматически создаваться промежуток между компонентами при последовательном размещении.
Метод setAutoCreateContainerGaps устанавливает, должен ли автоматически создаваться промежуток между контейнером и компонентами, которые касаются границы контейнера, при параллельном размещении.
Метод setHorizontalGroup создает горизонтальную группу компонентов, а метод setVerticalGroup создает вертикальную группу компонентов, при этом мы определяем, какая это будет группа – с последовательным размещением компонентов или параллельным размещением.
Для определения типа группы используются методы createSequentialGroup и createParallelGroup.
Метод addComponent добавляет компонент в группу, а метод addGroup добавляет группу.
В этом примере мы создаем горизонтальную группу с последовательным размещением, в которую добавляем кнопку и группу.
По горизонтальной оси кнопки 2 и 3 занимают одно и тоже место, поэтому эта группа будет параллельной.
И в нее мы добавляем кнопки 2 и 3.
Теперь по вертикальной оси у нас все кнопки расположены последовательно, поэтому для вертикальной группы мы создаем последовательную группу, в которую добавляем все три кнопки.
Таким образом видно, что при работе с менеджером GroupLayout нужно сначала создать визуальный макет, а затем на его основе создавать группы.
BoxLayout и Box
Менеджер компоновки BoxLayout используется для размещения компонентов по вертикали или по горизонтали.
Менеджер компоновки BoxLayout создается с помощью конструктора, первым параметром которого указывается контейнер.
Второй параметр задает способ расположения компонентов в этом контейнере с помощью одной из констант X_AXIS – расположение слева направо, Y_AXIS – расположение сверху вниз, LINE_AXIS и PAGE_AXIS – расположение определяется контейнером.
Если задано горизонтальное расположение компонентов, тогда менеджер пытается сделать высоту всех компонентов одинаковой, равной высоте самого высокого компонента.
При вертикальном расположении менеджер старается выровнять ширину компонентов по самому широкому компоненту.
Панель Box – это контейнер, который использует менеджер компоновки BoxLayout.
Вы можете легко создавать сложные компоновки компонентов, помещая их в несколько вложенных ящиков Box.
Панель Box создается с помощью статического метода createHorizontalBox для горизонтального размещения компонентов или статического метода createVerticalBox для вертикального размещения компонентов.
Класс Box также предоставляет статические методы, которые создают невидимые компоненты, которые можно использовать для улучшения компоновки.
Их можно даже использовать в контейнерах, которые не являются панелями Box, например, в панели JPanel.
Вы можете отдельно управлять выравниванием каждого компонента, вызывая следующие методы setAlignmentX, выравнивание о оси х от центра контейнера, и setAlignmentY, выравнивание по оси y, которые компонент наследует от класса Component.
strut- это невидимый компонент, который имеет фиксированный размер в пикселях.
Создается strut с помощью статических методов createHorizontalStrut и createVerticalStrut, после чего его можно добавлять в контейнер, как и любой другой компонент.
glue – это невидимый компонент, который расширяется или сжимается по размеру по мере необходимости, чтобы заполнить пространство между компонентами.
Он полезен для сохранения ориентации компонентов в контейнере по мере его изменения.
glue создается с помощью статического метода createGlue.
Разделительная область (rigid area) – это невидимый компонент с фиксированной шириной и высотой.
Этот компонент создается с помощью статического метода createRigidArea.
Кроме этих трех компонентов-разделителей можно использовать невидимый компонент с фиксированным минимальным, максимальным и предпочтительным размерами.
Он является объектом класса Filler, вложенного в класс Box.
SpringLayout
Менеджер компоновки SpringLayout размещает компоненты, определяя ограничения SpringLayout.Constraints между краями компонентов.
Например, вы можете определить, что левый край одного компонента является фиксированным расстоянием (например, 5 пикселей) от правого края другого компонента.
В SpringLayout положение каждого края зависит от положения только одного другого края.
Если далее создается ограничение SpringLayout.Constraints для создания новой привязки края, предыдущее связывание отбрасывается, и край остается зависимым только от одного края.
В отличие от многих менеджеров компоновки SpringLayout автоматически не устанавливает местоположение своих компонентов.
Для установки местоположения компонента, его левый, правый, верхний и нижний края связываются с соответствующими краями контейнера и соседних компонентов.
Края компонента привязываются с помощью объектов SpringLayout.Constraints.
Объект Constraints содержит ограничения, которые определяют способ изменения размера и позиции компонента в контейнере.