Вы находитесь на странице: 1из 4

12.06.

2023, 15:49 OneNote

Менеджеры компоновки. 
2 июня 2023 г.  19:49 

Размещение компонентов в контейнере 


 
• Разместить компоненты в контейнере можно двумя способами - плохим
и хорошим.  
1. Плохой способ - это абсолютное позиционирование, когда, например,
вы указываете, что такая-то кнопка должна располагаться на расстоянии
20 пикселей от левой границы экрана и 10 пикселей от верхней границы,
размер она должна иметь такой-то и т.д. 
 С одной стороны, вроде бы все удобно и несложно, но при этом отсутствует
реакция на 
изменения размера контейнера. При изменении размера окна компонент
все так же будет находиться в том же месте и иметь тот же размер. 
 
Чтобы этих проблем избежать, есть классы, которые называются
менеджерами компоновки. Они управляют размером компонентов и их
взаимным расположением. 
 
Для реализации менеджеров компоновки есть два интерфейса -
LayoutManager и LayoutManager2 
Отличие: во втором случае есть объект constraints, который позволяет задать
какую-то 
дополнительную характеристику для расположения. 
 
Соответственно есть методы setLayout и add: 
Интерфейс LayoutManager 
• Container.setLayout(LayoutManager) - нужен для задания контейнеру
менеджера компоновки, который будет управлять расположением
компонентов 
• Container.add(Component) - добавляет компонент в контейнер, причем
расположением элемента будет управлять менеджер компоновки 
Интерфейс LayoutManager2 
• Container.setLayout(LayoutManager2, Object constraints) 
• Container.add(Component, Object constraint) 
 
 
Расстановка элементов 
• Container.validate()  - проходит по дереву компонентов и валидирует их
размеры и расположение 
• Container.invalidate() 
• Container.doLayout() - занимается расстановкой  
• LayoutManager.layoutContainer(Container) 
Управление размером компонентов 
• Component.getPreferredSize() - предпочтительный размер 
• Component.getMinimumSize() - минимальный размер 
• Component.getMaximumSize() - максимальный размер 
-> Их можно установить и можно получить их значения.  
 
 
Стандартные менеджеры компоновки AWT: 
1. FlowLayout 
• менеджер последовательного расположения  
• размещает компоненты в контейнере слева направо, сверху вниз 
• при полном заполнении компонентами строки контейнера FlowLayout
переходит на следующую строку вниз  

https://niuitmo-my.sharepoint.com/personal/jmal_niuitmo_ru/_layouts/15/Doc.aspx?sourcedoc={641f319b-0424-4d97-adcf-26bcf29fbcb8}&action=… 1/4
12.06.2023, 15:49 OneNote

• основным свойством FlowLayout является определение предпочтительного


размера компонентов 

Пример: 
public class FlowLayoutTest extends JFrame //окно с рамкой JFrame 

    public FlowLayoutTest() 
    { 
        super("FlowLayout"); 
        setDefaultCloseOperation( EXIT_ON_CLOSE ); 
        setSize(300, 120); 
        // Панель содержимого 
        Container container = getContentPane(); 
        /* 
         * Определение последовательного расположения  
         * с выравниванием компонентов по центру 
         */ 
        container.setLayout (new FlowLayout(FlowLayout.CENTER)); 
        // добавляем компоненты 
        container.add( new JButton("Школа"   )); 
        container.add( new JButton("Институт")); 
        container.add( new JButton("Академия")); 
        // Открываем окно 
        setVisible(true); 
    } 
    public static void main(String[] args) { 
        new FlowLayoutTest(); 
    } 

 
 
2. GridLayout  
• контейнер в виде таблицы с ячейками одинакового размера 
• количество строк и столбцов можно указать в конструкторе 
• имеется возможность задать произвольное количество либо строк, либо
столбцов, но не одновременно 
• все ячейки таблицы имеют одинаковый размер, равный размеру самого
большого компонента, находящегося в таблице 

 
Пример: 
 

https://niuitmo-my.sharepoint.com/personal/jmal_niuitmo_ru/_layouts/15/Doc.aspx?sourcedoc={641f319b-0424-4d97-adcf-26bcf29fbcb8}&action=… 2/4
12.06.2023, 15:49 OneNote

3. CardLayout 
• можно использовать для создания так называемых вкладок (tabs), выбирая
которые будут избранно открываться разные панели, занимающие одно и то
же место в интерфейсе окна 
• панели добавляются в контейнер с компоновкой CardLayout, в один момент
времени 
отображается только одна из них 
• выбрать нужную панель можно с помощью метода show() 
 
Пример: 
 
4.  BorderLayout 
• специально предназначен для обычных и диалоговых окон 
• позволяет быстро и просто расположить наиболее часто используемые
элементы любого окна: панель инструментов, строку состояния и основное
содержимое 
○ для этого BorderLayout разбивает окно на четыре области, а все
оставшееся место заполняется компонентом, выполняющим основную
функцию приложения - в редакторе это будет текстовое поле, в
многооконном приложении — рабочий стол 
• чтобы добавить с его помощью компонент в методе add() необходимо
использовать дополнительный параметр, который определяет область
контейнера для размещения компонента: 

○ Рекомендации : на север помещайте панель инструментов вашего


приложения. На юг помещайте строку состояния. Оставляйте западные и
восточные зоны окна свободными — только в этом случае панель
инструментов можно будет перетаскивать. Для главного окна вашего
приложения всегда используйте расположение BorderLayout. 
 Важно: Если область не указать, компоненты будут попадать в центр 
 
Пример: 
 
5. GridBagLayout  
• устанавливает компоненты в таблицу 
• дает возможность определять для компонентов разную ширину и высоту
колонок и строк таблицы  
• позволяет получить абсолютно любое расположение компонентов 
• при использовании менеджера расположения GridBagLayout необходимо
настраивать класс GridBagConstraints для каждого добавляемого компонента 
 
Пример: 
 
 
 
 

https://niuitmo-my.sharepoint.com/personal/jmal_niuitmo_ru/_layouts/15/Doc.aspx?sourcedoc={641f319b-0424-4d97-adcf-26bcf29fbcb8}&action=… 3/4
12.06.2023, 15:49 OneNote

https://niuitmo-my.sharepoint.com/personal/jmal_niuitmo_ru/_layouts/15/Doc.aspx?sourcedoc={641f319b-0424-4d97-adcf-26bcf29fbcb8}&action=… 4/4

Вам также может понравиться