Иллюстрированный самоучитель по Java

Менеджер BorderLayout


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

NORTH, SOUTH, WEST, EAST И CENTER.

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

add(Component comp, String region)

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

CENTER

.

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

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

BorderLayout(int hgap int vgap) — между областями остаются горизонтальные hgap и вертикальные vgap промежутки, задаваемые в пикселах.

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

CENTER

, то компоненты прижимаются к границам контейнера.



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

Листинг 11.2.

Менеджер размещения BorderLayout 

import java.awt.*; 

import ]ava.awt.event.* ;

class BorderTest extends Frame{ 

BorderTest(String s){ super(s);

add(new Button("North"), BorderLayout.NORTH); 

add(new Button("South"), BorderLayout.SOUTH); 

add(new Button("West"), BorderLayout.WEST); 

add(new Button("East"), BorderLayout.EAST); 

add(new Button("Center")); 

setSize(300, 200); 

setVisible(true); 

public static void main(String[] args){

Frame f= new BorderTest(" Менеджер BorderLayout"); 

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent ev){


System.exit(0); 

}

});



}





Рис. 11.2.


Области размещения

BorderLayout

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



Листинг 11.3.


Сложная компоновка 

import j ava.awt.*; 

import java.awt.event.*;

class BorderPanelTest extends Frame{ 

BorderPanelTest(String s){ 

super(s);

    // Создаем панель р2 с тремя кнопками 

Panel p2 = new Panel();

p2.add(new Button("Выполнить")); 

p2.add(new Button("Отменить")); 

p2.add(new Button("Выйти"));

Panel pi = new Panel ();

pi.setLayout(new BorderLayout());

    // Помещаем панель р2 с кнопками на "юге" панели р1 

p1.add(p2, BorderLayout.SOUTH);

    // Поле ввода помещаем на "севере" 

p1.add(new TextFieldt"Поле ввода", 20), BorderLayout.NORTH);

    // Область ввода помещается в центре 

p1.add(new TextArea("Область ввода", 5, 20, TextArea.SCROLLBARS_NONE), BorderLayout.CENTER);

add(new Scrollbar(Scrollbar.HORIZONTAL), BorderLayout.SOUTH); 

addfnew Scrollbar(Scrollbar.VERTICAL), BorderLayout.EAST);

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

setSizePOO, 200); 

setVisible(true) ; 



public static void main(String[] args){

Frame f= new BorderPanelTest(" Сложная компоновка"); 

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent ev){

System.exit(0); 

}

}); 



}





Рис. 11.3.


Компоновка  с помощью FiowLayout и BorderLayout


Содержание раздела