Размещение компонентов
В предыдущей главе мы размешали компоненты "вручную", задавая их размеры и положение в контейнере абсолютными координатами в координатной системе контейнера. Для этого мы применяли метод setBounds().
Такой способ размешает компоненты с точностью до пиксела, но не позволяет перемещать их. При изменении размеров окна с помощью мыши компоненты останутся на своих местах, привязанными к левому верхнему углу контейнера. Кроме того, нет гарантии, что все мониторы отобразят компоненты так, как вы задумали.
Чтобы учесть изменение размеров окна, надо задать размеры и положение компонента относительно размеров контейнера, например, так:
int w = getSize().width; // Получаем ширину int h = getSize().height; //и высоту контейнера Button b = new Button("OK"); // Создаем кнопку b.setBounds(9*w/20, 4*h/5, w/10, h/10);
…и при всяком изменении размеров окна задавать расположение компонента заново.
Чтобы избавить программиста от этой кропотливой работы, в библиотеку AWT внесены два интерфейса: LayoutManager и порожденный от него интерфейс LayoutManager2, а также пять реализаций этих интерфейсов: классы BorlerLayout, CardLayout, FlowLayout, GridLayout и GridBagLayout. Эти классы названы менеджерами размещения (layout manager) компонентов.
Каждый программист может создать свои менеджеры размещения, реализовав интерфейсы LayoutManager или LayoutManager2.
Посмотрим, как размещают компоненты эти классы.