Класс CardLayout уникален среди других менеджеров компоновки тем, что хранит несколько различных размещений. Каждое размещение можно предствлять отдельной пронумерованной картой в колоде, которая может быть перетасована так, чтобы в данный момент наверху находилась любая карта. Это может быть полезно для интерфейсов пользователя с необязательными компонентами, которые можно динамически включать и выключать при вводе пользователя. Вы можете подготовить другие компоновки и сделать их скрытыми, но готовыми к активизации, когда ЭТОнеобходимо. CardLayout обеспечивает два конструктора:
CardLayout ()
CardLayout (int horz, int vert)
Первая форма создает карточную компоновку по умолчанию. Вторая — позволяет указывать горизонтальный и вертикальный пробел, оставляемый между компонентами (в параметрах horz и vert, соответственно).
Использование карточной компоновки требует немного большей работы, чем в других компоновках. Карты обычно содержатся в объекте типа Panel. Эта панель должна выбрать CardLayout, как свой менеджер компоновки. Карты, которые формируют колоду, также обычно являются объектами типа Panel. Таким образом, вы должны создать панель, которая содержит колоду и панель для каждой карты в колоде. Затем, вы добавляете к соответствующей панели компоненты, которые формируют каждую карту. Далее, вы добавляете карточные панели к панели менеджера CardLayout. Наконец, вы добавляете эту панель к главной панели апплета. Как только эти шаги закончены, вы должны обеспечить для пользователя некоторый способ выбора между панелями. Один из обычных подходов состоит в том, чтобы ввести по одной командной кнопке для каждой карты в колоде.
Когда карточные панели добавляются в панель колоды (т. е. компоновщика), им обычно присваиваются имена. Для добавления карт в панель колоды в большинстве случаев будет использоваться следующая форма метода add():
void add (Component panelGbj, Object name) ;
Здесь name — строка, которая определяет имя карты, чья панель указана в параметре paneiobj.
После того как вы создали колоду, программа активизирует карту, вызывая один из следующих методов, определенных в CardLayout:
void first(Container deck)
void last(Container deck)
void next(Container deck)
void previous (Container deck)
void show(Container deck, String cardtfame)
Здесь deck — ссылка на контейнер (обычно — панель), который содержит карты, a cardName — имя карты. Вызов first() заставляет показать первую карту в колоде. Чтобы отобразить последнюю карту, вызовите last(). Для показа очередной карты вызывайте next(), а предыдущей — previous(). Как nex(), так и previous() автоматически повторяют цикл сверху или снизу колоды, соответственно. Метод show() отображает карту, чье имя передается ВcardName.
Следующий пример создает двухуровневую колоду, которая позволяет пользователю выбирать операционную систему. Операционные системы на базе Windows отображаются на одной карте, Macintosh и Solaris — на другой.