Читаем Java 7 полностью

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


В предыдущих главах мы размещали компоненты главным образом "вручную", задавая их размеры и положение в контейнере абсолютными координатами в координатной системе контейнера. Для этого мы применяли метод 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) компонентов. Мы уже использовали некоторые из них в предыдущих главах без всякого объяснения. Библиотека Swing добавляет к указанным классам свои менеджеры размещения, используемые контейнерами Swing.

Каждый программист может создать собственные менеджеры размещения, реализовав интерфейсы LayoutManager или LayoutManager2.

Посмотрим, как размещают компоненты эти классы.

Менеджер FlowLayout


Наиболее просто поступает менеджер размещения FlowLayout. Он укладывает в контейнер один компонент за другим слева направо как кирпичи, переходя от верхних рядов к нижним. При изменении размера контейнера "кирпичи" перестраиваются, как показано

на рис. 14.1. Компоненты поступают в том порядке, в каком они заданы в методах

add().

В каждом ряду компоненты могут прижиматься к левому краю, если в конструкторе аргумент align равен FlowLayout.LEFT, к правому краю, если этот аргумент FlowLayout.RIGHT, или собираться в середине ряда, если FlowLayout.CENTER.

Между компонентами можно оставить промежутки (gap) по горизонтали hgap и вертикали vgap. Это задается в конструкторе:

FlowLayout(int align, int hgap, int vgap);

Второй конструктор задает промежутки размером 5 пикселов:

FlowLayout(int align);

Третий конструктор определяет выравнивание по центру и промежутки 5 пикселов:

FlowLayout();

После формирования объекта эти параметры можно изменить методами:

setHgap(int hgap); setVgap(int vgap); setAlignment(int align);

В листинге 14.1 создаются кнопка JButton, метка JLabel, кнопка выбора JCheckBox, раскрывающийся список JComboBox, поле ввода JtextField и все это размещается в контейнере JFrame. Рисунок 14.1 содержит вид перечисленных компонентов при разных размерах контейнера.

Листинг 14.1. Менеджер размещения FlowLayout

import java.awt.*; import javax.swing.*;

class FlowTest extends JFrame{

FlowTest(String s){ super(s);

setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));

add(new JButton("Кнопка"));

add(new JLabel("Метка"));

add(new JCheckBox("Выбор"));

add(new JComboBox());

add(new JTextField("Ввод", 10));

setSize(300, 100);

setVisible(true);

}

public static void main(String[] args){

JFrame f= new FlowTest(" Менеджер FlowLayout"); f.setDefaultCloseOperation(EXIT ON CLOSE);

}


Рис. 14.1. Размещение компонентов с помощью FlowLayout

Менеджер BorderLayout


Менеджер размещения BorderLayout делит контейнер на пять неравных областей, полностью заполняя каждую область одним компонентом, как показано на рис. 14.2. Области получили географические названия — north, south, west, east и center.

Метод add () в случае применения BorderLayout имеет два аргумента: ссылку на компонент comp и область region, в которую помещается компонент — одну из перечисленных ранее констант: add(Component comp, String region).

Обычный метод add (Component comp) с одним аргументом помещает компонент в область

CENTER.

Ссылку на компонент, помещенный в определенную область, можно получить методом

getLayoutComponent(Object region);

параметром которого служит одна из перечисленных ранее констант.

В классе два конструктора:

□ BorderLayout () — между областями нет промежутков;

□ BorderLayout (int hgap int vgap) - между областями остаются горизонтальные hgap и

вертикальные vgap промежутки, задаваемые в пикселах.

Если в контейнер помещается менее пяти компонентов, то некоторые области не используются и не занимают места в контейнере, как можно заметить на рис. 14.3. Если не занята область center, то компоненты прижимаются к границам контейнера.

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT