Менеджер 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, то компоненты прижимаются к границам контейнера.

В листинге 14.2 создаются пять кнопок, размещаемых в контейнере. Обратите внимание на отсутствие установки менеджера в контейнере setLayout () — менеджер BorderLayout установлен в контейнере JFrame по умолчанию. Результат размещения показан на рис. 14.2.

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

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

class BorderTest extends JFrame{

BorderTest(String s){ super(s);

add(new JButton("North"), BorderLayout.NORTH); add(new JButton("South"), BorderLayout.SOUTH); add(new JButton("West"), BorderLayout.WEST); add(new JButton("East"), BorderLayout.EAST); add(new JButton("Center")); setSize(300, 200); setVisible(true);

}

public static void main(String[] args){

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

}

}

Рис. 14.2. Области размещения BorderLayout
Рис. 14.3. Компоновка с помощью FlowLayout и BorderLayout

Менеджер размещения BorderLayout кажется неудобным: он располагает не больше пяти компонентов, последние растекаются по всей области, области имеют странный вид. Но дело в том, что в каждую область можно поместить не компонент, а панель, и размещать компоненты на ней, как сделано в листинге 14.3 и показано на рис. 14.3. Напомним, что на панелях Panel и JPanel менеджер размещения по умолчанию —

FlowLayout.

Листинг 14.3. Сложная компоновка

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

class BorderPanelTest extends JFrame{

BorderPanelTest(String s){ super(s);

// Создаем панель p2 с тремя кнопками JPanel p2 = new JPanel();

p2.add(new JButton("Выполнить")); p2.add(new JButton("Отменить")); p2.add(new JButton("Выйти"));

JPanel p1 = new JPanel(); p1.setLayout(new BorderLayout());

// Помещаем панель p2 с кнопками на "юге" панели p1 p1.add(p2, BorderLayout.SOUTH);

// Поле ввода помещаем на "севере" p1.add(new JTextField("Поле ввода", 20), BorderLayout.NORTH);

// Область ввода помещается на панель с прокруткой JScrollPane sp = new JscrollPane(

new JTextArea("Область ввода", 5, 20));

// Панель прокрутки помещается в центр панели p1 p1.add(sp), BorderLayout.CENTER);

// Панель p1 помещаем в "центре" контейнера add(p1, BorderLayout.CENTER); setSize(300, 200); setVisible(true);

}

public static void main(String[] args){

JFrame f= new BorderPanelTest(" Сложная компоновка"); f.setDefaultCloseOperation(EXIT ON CLOSE);

}

}