Менеджер BorderLayout

We use cookies. Read the Privacy and Cookie Policy

Менеджер размещения 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);

}

}