Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Именно для этой цели служат менеджеры компоновки. Их задача — вычислить и установить размер и местоположение компонентов в контейнере. Вообще говоря, они могут использовать следующий набор параметров для своих вычислений:
• размер контейнера;
• начальное положение и размер компонента;
• его порядковый номер в наборе компонентов;
• специальный параметр-ограничитель (constraint), который может быть установлен при добавлении компонента.
В AWT каждый контейнер обладает менеджером компоновки. Если он равен null, то используются явные параметры компонентов. Настоящие же классы менеджеров должны реализовывать интерфейс LayoutManager. Этот интерфейс принимает в качестве constraints строку (String). Со временем это было признано недостаточно гибким (фирмы стали разрабаты-^ть и предлагать свои менеджеры, обладающие самой разной функциональностью). Поэтому был добавлен новый интерфейс -^youtManager2, принимающий в качестве ограничителя constraints.
Рассмотрим работу нескольких наиболее распространенных менеджеров компоновки. Но перед этим отметим общий для них всех факт. Дело в том, что не всегда вся область контейнера подходит для размещения в Ней компонент. Например, фрейм имеет рамку и полосу заголовка. В результате его полезная площадь меньше. Поэтому все менеджеры компонов
ки начинают с обращения к методу getlnsets класса Container. Этот Mei0) возвращает значение типа Insets. Это класс, который имеет четыре откры. тых поля - top, right, bottom, left, значения которых описывают отступ^ со всех четырех сторон, которые необходимо сделать, чтобы получить об. ласть, доступную для расположения компонент.
Класс FlowLayout
Этот менеджер является стандартным для Panel. Он не меняет размер компонент, а только располагает их один за другим в линию, как буквы в строке. Когда заканчивается первая "строка", он переходит на следующую и так далее, пока либо не закончится область контейнера, либо не будут расположены все компоненты.
В качестве параметров конструктору можно передать значение выравнивания по горизонтали (определены константы LEFT, RIGHT, CENTER -значение по умолчанию), а также величину необходимых отступов между компонентами по вертикали (vgap) и горизонтали (hgap). Их значение по умолчанию — 5 пикселов.
Рассмотрим пример:
final Frame f = new Framef'Flaw"); f.setSize(400, 300);
f.setLayout(new FlowLayout(FlowLayout.LEFT)); f.add(new Label ("Test")); f.add(new Button("Long string")); f.addjnew TextArea(2, 20)); f.add(new Button("short")); f.add(newTextArea(4, 20)); f.add(new Label("Long-long text")); f.setVisible(true);
Если теперь менять размер этого фрейма, то можно видеть, как перераспределяются компоненты:
Класс BorderLayout
Этот менеджер является стандартным для контейнера Window и его иаследников Frame и Dialog.
BorderLayout использует ограничитель. При добавлении компонента необходимо указать одну из 5 констант, определенных в этом классе: NORTH, SOUTH, EAST, WEST, CENTER (используется по умолчанию), первыми располагаются северный и южный компонент. Их высота не изменяется, а ширина становится равной ширине контейнера. Северный компонент помещается на самый верх контейнера, южный — вниз. Затем располагаются восточный и западный компоненты. Их ширина не меняется, а высота становится равной высоте контейнера за вычетом места, которое заняли первые две компоненты. Наконец, все оставшееся место занимает центральная компонента.
Рассмотрим пример:
final Frame f = new Frame("Border"); f.setSize(200, 150);
f.add(new Button("North"), BorderLayout.NORTH); f.addjnew Button("South"), BorderLayout.SOUTH); f.addjnew Button("West"), BorderLayout.WEST); f.add(new Button ("East"), BorderLayout. EAST); f.add(new Button("Center"), BorderLayout.CENTER); f.setVisible(true);
Вот как выглядит такой фрейм:
Класс СгМ1-ауои1
Этот менеджер поступает следующим образом - он разделяет весь к°нтейнер на одинаковые прямоугольные сектора (отсюда и его название ^Решетка). Далее последовательно каждый компонент полностью занимает свой сектор (таким образом, они все становятся одинакового размера).
Курс_______________________________________________________ Программирование на_Ла„.
В конструкторе указывается количество строк и столбцов д1; разбиения:
final Frame f = new Frame("Grid"); f.setSize(200, 200); f.setl_ayout(new GridLayout(3, 3)); for (int i=0; i<8; i++) {
f.add(new Button("-"+(i+1)+"-"));
}
f.setVisible(true);
Вот как выглядит такой фрейм:
И в этом менеджере есть параметры hgap и vgap (по умолчанию и\ значение равно нулю).
Класс CardLayout
Этот менеджер ведет себя подобно колоде карт. В один момент виден лишь один компонент, и он занимает всю область контейнера. Программист может управлять тем, какой именно компонент показывается пользователю.
Заключение
Библиотека AWT имеет множество классов и внутренних механизмов. Новые версии Java добавляют новые возможности и пересматривают старые. Тем не менее, основные концепции были подробно рассмотрены в этой лекции и на их основе можно построить полнофункциональны!1 графический интерфейс пользователя (GUI).
Стандартные компоненты AWT иерархически упорядочены в дерев0 наследования с классом Component в вершине. Важным его наследников является класс Container, который может хранить набор компонентов Прямые наследники Component составляют набор управляющих З'е
380
Пакет jva.awt
gjfTOB ("контролов", от англ. controls), а наследники Container — набор контейнеров для группировки и расположения компонентов. Для упрощения размещения отдельных элементов пользовательского интерфейса Применяются менеджеры компоновки (Layout managers).
Особое место в AWT занимает процедура отрисовки компонентов, которая может инициироваться как операционной системой, так и программой. Специальные классы служат для задания таких атрибутов, как цвет, шрифт и т.д.
Один из наследников Container — класс Window, который представляет собой самостоятельное окно в многооконной операционной системе. Два его наследника — Dialog и Frame. Для работы с файлами определен наследник Dialog - FileDialog.
Наконец, излагаются принципы модели событий от пользователя, позволяющей обрабатывать все действия, которые производит клиент, работая с программой. 11 событий и соответствующих им интерфейсов предоставляют все необходимое для написания полноценной GUI-программы.
Апплеты — небольшие программы, предназначенные для работы в браузерах как небольшие части HTML-страниц. Класс java.applet.Applet является наследником Panel, а потому обладает всеми свойствами AWT-компонент. Были представлены этапы жизненного цикла апплета, отличного от цикла обычного приложения, которое запускается методом main. Для размещения апплета на HTML-странице необходимо использовать специальный тег <applet>. Кроме этого, можно указывать специальные параметры, чтобы апплет настраивался без перекомпиляции кода.
КуРС Программирование ням^,
Пакет jva.awt
Вариант 1
От какого класса наследуется класс Applet?
Р Object
Q Java. awt. Component Q java.awt.Canvas Q java.awt. Panel
2. Какой метод нужно вызвать, чтобы инициировать перерисовку компонента?
П paint
□ update
□ repaint
3. Какими параметрами в Java характеризуется шрифт?
П имя-семейство шрифта
П жирность
□ размер О стиль
□ цвет
Вариант 2
Вариант 3
Может ли быть дважды вызван метод init у апплета? Метод start?
□ да, да
□ да, нет
□ нет, да
□ нет, нет
J, Как получить объект класса Color, описывающий чистый синий цвет?
Р new Color("blue")
Р new Color(0, 0, 255)
Р Color.getBlue()
Р Color, blue
Какой метод нужно переопределить, чтобы реализовать отрисовку внешнего вида компонента?
□ paint
□ update fj repaint
2. Какие утверждения верны?
метод update вызывает метод paint
метод repaint вызывает метод paint Г*| метод update вызывает метод repaint
метод repaint вызывает метод update
Сколько вложенных компонентов может быть контейнера БсгоИРапе?
□ о
□ 1
П произвольное количество
3. В чем разница между компонентами List и Choice?
Г*| List позволяет просмотреть весь список вариантов значения, a Choice - нет
Г*| List допускает выбор нескольких вариантов, a Choice - нет
Г*| List одновременно отображает несколько вариантов значения, a Choice - нет
Г*| List не позволяет ввести произвольное значение, a Choice - да