В предыдущей статье, мы говорили об основных диспетчерах размещения и размещении потока. Теперь, давайте поговорим об одном из наиболее популярных диспетчеров размещения, BorderLayout. BorderLayout делит отображаемую область контейнера на 5 разделов: EAST (право), WEST (лево), NORTH (верхняя часть), SOUTH (нижняя часть) и CENTER (центр). Далее показаны некоторые интересные характеристики BorderLayout:
1. Он выставляет высоту компонентов в значения NORTH и SOUTH, или только одно. Если только одно, то он устанавливает ширину этого компонента (ов) в максимальную ширину контейнера.
2. Он выставляет ширину компонентов в значения EAST и WEST, или только одно. Если только одно, он устанавливает высоту этого компонента (ов) в максимальную высоту контейнера.
3. Он распределяет остаток области, если выбрано только одно значение, в CENTER.
Обратите внимание, что выставляемые высота и ширина получаются при использовании метода getPreferredSize(). Вам нужно использовать метод add(), который использует ограничения для добавления компонентов в контейнер. Параметр ограничения предоставляет для диспетчера размещения информацию о том, куда добавить специфический компонент. Следующая программа показывает это:
import java.awt.*;
/** Demonstrates the use of BorderLayout. */
public class BorderLayoutDemo extends Frame {
/** Initializes the demo. */
public BorderLayoutDemo() {
super("BorderLayout Demo");
}
/** Demonstrates the use of BorderLayout. */
public void demonstrate() {
// Set the layout
setLayout(new BorderLayout());
// Create the components
// The label for the comments
Label cmtLbl = new Label("Enter your comments:");
// The text area for comments
TextArea comments = new TextArea("");
// The button to accept the comments
Button okButn = new Button("Ok");
// The button to reject the comments
Button cancelButn = new Button("Cancel");
// The panel to hold the buttons
Panel butnPanel = new Panel(new FlowLayout());
// Add the buttons to the panel
butnPanel.add(okButn);
butnPanel.add(cancelButn);
// Add the components to the frame
add(cmtLbl, BorderLayout.NORTH);
add(comments, BorderLayout.CENTER);
add(butnPanel, BorderLayout.SOUTH);
// Do the layout
pack();
// Show
setVisible(true);
}
/** Main. */
public static void main(String[] args) {
BorderLayoutDemo bld = new BorderLayoutDemo();
bld.demonstrate();
}
}
Комментарии пользователя делают эту программу простой. Здесь, метод main создает demo образец и запускает его, используя метод demonstrate(). Этот метод сначала устанавливает диспетчер размещения в BorderLayout, а затем создает компоненты для demo: метку, текстовую область и панель кнопок. Заметьте, что панель кнопок имеет FlowLayout. Обратите особое внимание на вызовы метода add() для добавления этих компонентов к фрейму. Второй параметр для каждого такого обращения указывает, куда добавить соответствующий компонент. Наконец, он выполняет размещение и отображает фрейм.
Еще несколько интересных вещей относительно этого диспетчера размещения. Вы можете управлять горизонтальным и вертикальным пространством между компонентами. Только один компонент может быть добавлен к области. Рассмотрите следующий фрагмент кода:
//...
// Add components to the container
add(component1, BorderLayout.NORTH);
add(component2, BorderLayout.NORTH);
//...
В этом случае, только "component2" был бы добавлен в верхнюю часть контейнера. Но это не означает, что вы не можете показывать больше одного компонента в области. Не забудьте, мы добавили панель с 2 кнопками в вышеупомянутой программе. В этом прелесть диспетчеров размещения. Комбинация диспетчеров размещения может дать очень гибкий GUI.
1. Он выставляет высоту компонентов в значения NORTH и SOUTH, или только одно. Если только одно, то он устанавливает ширину этого компонента (ов) в максимальную ширину контейнера.
2. Он выставляет ширину компонентов в значения EAST и WEST, или только одно. Если только одно, он устанавливает высоту этого компонента (ов) в максимальную высоту контейнера.
3. Он распределяет остаток области, если выбрано только одно значение, в CENTER.
Обратите внимание, что выставляемые высота и ширина получаются при использовании метода getPreferredSize(). Вам нужно использовать метод add(), который использует ограничения для добавления компонентов в контейнер. Параметр ограничения предоставляет для диспетчера размещения информацию о том, куда добавить специфический компонент. Следующая программа показывает это:
import java.awt.*;
/** Demonstrates the use of BorderLayout. */
public class BorderLayoutDemo extends Frame {
/** Initializes the demo. */
public BorderLayoutDemo() {
super("BorderLayout Demo");
}
/** Demonstrates the use of BorderLayout. */
public void demonstrate() {
// Set the layout
setLayout(new BorderLayout());
// Create the components
// The label for the comments
Label cmtLbl = new Label("Enter your comments:");
// The text area for comments
TextArea comments = new TextArea("");
// The button to accept the comments
Button okButn = new Button("Ok");
// The button to reject the comments
Button cancelButn = new Button("Cancel");
// The panel to hold the buttons
Panel butnPanel = new Panel(new FlowLayout());
// Add the buttons to the panel
butnPanel.add(okButn);
butnPanel.add(cancelButn);
// Add the components to the frame
add(cmtLbl, BorderLayout.NORTH);
add(comments, BorderLayout.CENTER);
add(butnPanel, BorderLayout.SOUTH);
// Do the layout
pack();
// Show
setVisible(true);
}
/** Main. */
public static void main(String[] args) {
BorderLayoutDemo bld = new BorderLayoutDemo();
bld.demonstrate();
}
}
Комментарии пользователя делают эту программу простой. Здесь, метод main создает demo образец и запускает его, используя метод demonstrate(). Этот метод сначала устанавливает диспетчер размещения в BorderLayout, а затем создает компоненты для demo: метку, текстовую область и панель кнопок. Заметьте, что панель кнопок имеет FlowLayout. Обратите особое внимание на вызовы метода add() для добавления этих компонентов к фрейму. Второй параметр для каждого такого обращения указывает, куда добавить соответствующий компонент. Наконец, он выполняет размещение и отображает фрейм.
Еще несколько интересных вещей относительно этого диспетчера размещения. Вы можете управлять горизонтальным и вертикальным пространством между компонентами. Только один компонент может быть добавлен к области. Рассмотрите следующий фрагмент кода:
//...
// Add components to the container
add(component1, BorderLayout.NORTH);
add(component2, BorderLayout.NORTH);
//...
В этом случае, только "component2" был бы добавлен в верхнюю часть контейнера. Но это не означает, что вы не можете показывать больше одного компонента в области. Не забудьте, мы добавили панель с 2 кнопками в вышеупомянутой программе. В этом прелесть диспетчеров размещения. Комбинация диспетчеров размещения может дать очень гибкий GUI.