Секреты программирования для Internet на Java
.pdf
Гораздо лучше будет создать компонент, который затем можно поместить в апплет. Поскольку класс Applet является подклассом класса Container, он автоматически передаст свои события компонентам, которые в нем содержатся. Фактически выполнение нашей работы внутри компонента облегчит обмен интерактивной анимацией с любым апплетом. Это примерно то же самое, что использование Scrollbar или любого другого подкласса класса Component. Но где нам сделать подкласс? Можно сделать подкласс непосредственно в классе Component, но лучше давайте сделаем подкласс в Canvas. Класс Canvas облегчит задачу размещения рисунка, а это важно, если мы хотим, чтобы рисунок можно было перемещать. Назовем этот подкласс класса
Canvas actionImageCanvas.
Итак, возникла необходимость в нескольких классах. У нас обязательно будет подкласс класса Applet, но с этого момента он будет играть очень маленькую роль - содержать лишь actionImageCanvas. Кроме того, у нас есть подклассы класса actionArea. Стоит ли помещать подклассы actionArea непосредственно в actionImageCanvas? Для этого придется перенести изображения непосредственно на поверхность рисунка, а это может оказаться неудобно, если мы когда-нибудь захотим что-то создать или поменять в изображениях на стороне клиента.
Лучше создадим класс actionImage, который будет отображать сам себя и следить за actionArea. В результате мы создадим иерархию для нашего внешнего интерфейса, изображенную на рис. 16-1. Заметим, что эта иерархия не является иерархией в терминах наследования, а только в терминах того, как мы структурируем наше отображение. Скорее, это иерархия вложений.
Рис. 16.1.
Теперь посмотрим, как в нашу схему встраивается анимация. Концепция анимации та же, что и для любой другой анимации, за исключением того, что мы не просто отображаем картинку, а должны активизировать определенный объект actionImage. Единственный вопрос при этом заключается в том, какой класс нашей иерархии должен запустить и поддерживать работу потока. Мы смело можем исключить из рассмотрения подкласс апплета Applet - вся суть actionImageCanvas состоит в том, чтобы отделить проект от апплета. Запуск потока из actionImageCanvas создаст сложности, если мы когда-нибудь захотим запустить больше одной анимации внутри одной рабочей области. Таким образом, остается поручить запуск анимации классу actionImage. В табл. 16-1 показано, какие функции приписаны различным классам нашей системы.
|
Таблица 16-1. Функции классов |
Класс |
Функция |
подкласс класса |
Передача события классам actionImageCanvas. |
Applet |
|
actionImageCanvas |
Создание поверхности рисунка для классов actionImage. Проверка |
|
диапазонов и конфликтов для множественных анимаций. Передача события |
|
классу actionImage. |
actionImage |
Запуск анимации. Обмен с нужными классами actionArea. Передача события |
|
классам actionArea. |
actionArea |
Выполнение действия. |
Ⱦɚɧɧɚɹ ɜɟɪɫɢɹ ɤɧɢɝɢ ɜɵɩɭɳɟɧɚ ɷɥɟɤɬɪɨɧɧɵɦ ɢɡɞɚɬɟɥɶɫɬɜɨɦ %RRNV VKRS Ɋɚɫɩɪɨɫɬɪɚɧɟɧɢɟ ɩɪɨɞɚɠɚ ɩɟɪɟɡɚɩɢɫɶ ɞɚɧɧɨɣ ɤɧɢɝɢ ɢɥɢ ɟɟ ɱɚɫɬɟɣ ɁȺɉɊȿɓȿɇɕ Ɉ ɜɫɟɯ ɧɚɪɭɲɟɧɢɹɯ ɩɪɨɫɶɛɚ ɫɨɨɛɳɚɬɶ ɩɨ ɚɞɪɟɫɭ piracy@books-shop.com
