Менеджер CardLayout

We use cookies. Read the Privacy and Cookie Policy

Менеджер размещения CardLayout своеобразен — он показывает в контейнере только один, первый (first), компонент. Остальные компоненты лежат под первым в определенном порядке как игральные карты в колоде. Их расположение определяется порядком, в котором написаны методы add(). Следующий компонент можно показать методом next(Container c), предыдущий — методом previous(Container c), последний — методом last(Container c), первый — методом first(Container c). Аргумент этих методов — ссылка на контейнер, в который помещены компоненты, обычно this.

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

? CardLayout () — не отделяет компонент от границ контейнера;

? CardLayout (int hgap, int vgap) — задает горизонтальные hgap и вертикальные vgap поля.

Менеджер CardLayout позволяет организовать и произвольный доступ к компонентам. Метод add () для менеджера CardLayout имеет своеобразный вид:

add(Component comp, Object constraints);

Здесь аргумент constraints должен иметь тип String и содержать имя компонента. Нужный компонент с именем name можно показать методом

show(Container parent, String name);

В листинге 14.5 менеджер размещения cl работает с панелью p, помещенной в "центр" контейнера JFrame. Панель p указывается как аргумент parent в методах next() и show(). На "север" контейнера JFrame отправлена панель p2 с меткой и раскрывающимся списком ch. Рисунок 14.5 демонстрирует результат работы программы.

Листинг 14.5. Менеджер CardLayout

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

class CardTest extends JFrame{ CardTest(String s){ super(s);

JPanel p = new JPanel();

CardLayout cl = new CardLayout(); p.setLayout(cl);

p.add(new JButton("Русская страница"),"page1"); p.add(new JButton("English page"), "page2"); p.add(new JButton("Deutsche Seite"), "page3"); add(p); cl.next(p); cl.show(p, "page1");

JPanel p2 = new JPanel(); p2.add(new JLabel("Выберите язык:"));

JComboBox ch = new JComboBox(); ch.addItem("Русский"); ch.addItem("Английский"); ch.addItem("Немецкий");

p2.add(ch);

add(p2, BorderLayout.NORTH);

setSize(400, 300); setVisible(true);

}

public static void main(String[] args){

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

}

}

Рис. 14.5. Менеджер размещения CardLayout