□ Component add(Component, int) — вставляет компонент в указанную позицию;
□ void add (Component, Object, int) -объединяет возможности остальных методов;
□ void addTab (String, Icon, Component) — помещает на вкладку строку и/или изображение;
□ void addTab(String title, Icon image, Component comp, String tip) — последний параметр tip задает всплывающую подсказку.
Все эти методы так или иначе обращаются к основному методу
void insertTab(String title, Icon image, Component comp, String tip. int ind);
которым можно пользоваться во всех случаях.
Многочисленные методы setXxx () позволяют установить отдельные элементы панелей и вкладок. Кроме того, можно задать цвет фона методом setBackgroundAt (Color), как показано на рис. 14.8 и в листинге 14.7. Это удобно для того, чтобы разметить вкладки разными цветами.
Листинг 14.7. Панель с разноцветными вкладками
import java.awt.*; import javax.swing.*;
public class Tabbed extends JFrame{
Tabbed(){
super(" Панель с вкладками"); setLayout(new FlowLayout());
String[] day = {"Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"};
JTabbedPane sp = new JTabbedPane(JTabbedPane.TOP,
JTabbedPane.SCROLL_TAB_LAYOUT); sp.setPreferredSize(new Dimension(300, 100)); for (int i = 0; i < 7; i++){
sp.add(day[i], new JLabel("Метка " + i)); sp.setBackgroundAt(i, new Color(16*i, 0, 16*(7-i)));
}
add(sp);
setSize(400, 400);
setDefaultCloseOperation(EXIT ON CLOSE); setVisible(true) ;
}
public static void main(String[] args){ new Tabbed();
}
}
Класс Box расставляет компоненты в одну строку или в один столбец, выравнивая их ширину или высоту по размеру наибольшего компонента. Этот класс был разработан для создания панелей инструментальных кнопок JToolBar, но его можно применять и для других целей. В классе есть только один конструктор — Box (int), в котором задается одна из двух констант класса BoxLayout: константа x_axis — размещение компонентов в одну строку, или y_axis — размещение компонентов в один столбец.
Еще один способ создания линейной панели — воспользоваться статическим методом
createHorizontalBox() или статическим методом createVerticalBox(). Эти методы всего лишь обращаются к конструктору с соответствующей константой.
Сами компоненты добавляются к панели Box унаследованными от класса Container методами add(Component), add(Component, int).
Расположением компонентов в классе Box занимается специально разработанный менеджер размещения BoxLayout. Применить другой менеджер к этому классу нельзя, метод setLayout (LayoutManager) выбрасывает исключение, но менеджер BoxLayout может с успехом применяться в контейнерах иных типов. Рассмотрим его подробнее.
Менеджер размещения
Экземпляры класса BoxLayout создаются конструктором BoxLayout(Container, int). Первым параметром указывается контейнер, размещением компонентов в котором будет управлять создаваемый менеджер размещения. Второй параметр задает способ расположения компонентов одной из констант x_axis — расположение слева направо, y_axis — расположение сверху вниз, line_axis и page_axis — расположение определяется контейнером. Создание и применение менеджера выглядят примерно так:
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.X AXIS)); p.add(new JLabel("Введите имя: ", JLabel.RIGHT)); p.add(new JTextField(30));
Если задано горизонтальное расположение компонентов, то менеджер пытается сделать высоту всех компонентов одинаковой, равной высоте самого высокого компонента. При вертикальном расположении менеджер старается выровнять ширину компонентов по самому широкому компоненту. Если это сделать не удается, например потому, что задан максимальный размер компонентов, то по умолчанию компоненты размещаются в центре панели. Точнее говоря, это зависит от того, какое значение возвращают методы getAlignmentx () и getAlignmentY () самого компонента. Возвращаемое этими методами значение меняется от 0.0f — компонент прижимается влево (вверх), до 1.0f — компонент прижимается вправо (вниз) относительно других компонентов.
Компоненты-заполнители
Казалось бы, в панели Box нет ничего хитрого, но ее возможности расширяются тем, что в число размещаемых на панели компонентов можно включить невидимые компоненты-заполнители трех видов.
Первый вид заполнителя — невидимая
static Component Box.createRigidArea(Dimension);
и вставляется между компонентами, создавая промежуток фиксированного размера между ними.
Заполнитель второго вида — невидимая
static Component Box.createHorizontalStrut(int width);