Навигация

Лекция 1. Что такое Java? История создания

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

Лекция 2. Основы объектно-ориентированного программирования

33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

Лекция 3. Лексика языка

51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

Лекция 4. Типы данных

69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

Лекция 5. Имена. Пакеты

90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108

Лекция 6. Объявление классов

109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128

Лекция 7. Преобразование типов

129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144

Лекция 8. Объектная модель в Java

145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160

Лекция 9. Массивы

161 162 163 164 165 166 167 168 169 170 171 172 173 174

Лекция 10. Операторы и структура кода. Исключения

175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195

Лекция 11. Пакет java.awt

196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224

Лекция 12. Потоки выполнения. Синхронизация

225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241

Лекция 13. Пакет java.lang

242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260

Лекция 14. Пакет java.util

261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286

Лекция 15. Пакет java.io

287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314

Лекция 16. Введение в сетевые протоколы

315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344




Именно для этой цели служат менеджеры компоновки. Их задача — вычислить и установить размер и местоположение компонентов в контейнере. Вообще говоря, они могут использовать следующий набор параметров для своих вычислений:

• размер контейнера;

• начальное положение и размер компонента;

• его порядковый номер в наборе компонентов;

• специальный параметр-ограничитель (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 - да