Аплеты Java
Аплет — это особый вид программы Java, предназначенный для передачи по Internet и автоматического выполнения Java-совместимым web-браузером. Аплеты позволяют перенести ряд функций с сервера к клиенту. Как правило, они используются для отображения данных, предоставляемых сервером, обработки действий пользователя или выполнения простых функций, которые выполняются локально, а не на сервере. Существует два типа аплетов. Первый тип основан непосредственно на классе Applet. Эти аплеты используют Abstract Window Toolkit (AWT) для предоставления пользовательского графического интерфейса (или вообще его не используют). Этот вид аплетов доступен с самого начала существования Java. Второй тип основан на Swing-классе JApplet. Аплеты Swing используют классы Swing для построения графического интерфейса пользователя. Swing предлагает более богатый и часто более легкий в применении пользовательский интерфейс, чем AWT.
Если пользователь щелкает на ссылке, которая содержит аплет, аплет автоматически загружается и запускается в браузере.
Все аплеты являются подклассами (прямыми или непрямыми) класса Applet. Аплеты не являются самостоятельными программами. Вместо этого они выполняются либо внутри web-браузера, либо в средстве просмотра аплетов (appletviewer). Для применения аплета его необходимо специфицировать в html-файле. Дескриптор (html-тег) applet используется как для запуска аплета из htmlдокумента, так и в средстве просмотра аплетов. Средство просмотра аплетов выполнит каждый дескриптор applet, который он обнаружит, в отдельном окне, в то время как web-браузеры позволяют выполнять много аплетов на одной странице. Аплет будет запущен web-браузером с поддержкой Java, когда он встретит дескриптор applet внутри html-файла.
Синтаксис полной формы дескриптора applet. <applet [codebase = “url_базы_кода”] code = “файл_аплета” [alt = “альтернативный_текст”] [name = “имя_экземпляра_аплета”] width = “количество_пикселей”> height = “количество_пикселей”> [align = “выравнивание”] [vspace = “количество_пикселей”] [hspace = “количество_пикселей”] > [<param name = “имя_атрибута 1” value = [<param name = “имя_атрибута 2” value = … [<param name = “имя_атрибута. N” value = … [html-код, отображаемый при отсутствии </applet> “значение_атрибута 1”>] “значение_атрибута 2”>] “значение_атрибута. N”>] Java]
• codebase – необязательный атрибут, специфицирующий базовый url кода аплета, который представляет собой каталог, где будет выполняться поиск исполняемого файла класса (указанного в дескрипторе code). Если этот атрибут не задан явно, в качестве codebase используется каталог url htmlдокумента. codebase не обязательно должен находиться на том же хосте, откуда прочитан html-документ; • code – обязательный атрибут, который задает имя файла, содержащего скомпилированный файл. class вашего аплета. Имя этого файла относительно к базовому url кода аплета, который является каталогом, где располагается html-фaйл либо каталогом, указанным в codebase; • alt – необязательный атрибут, используемый для указания краткого текстового сообщения, которое должно быть отображено, если браузер распознает дескриптор applet, но в данный момент не может выполнять Javaаплеты. Это отличается от альтернативного html-кода, который вы предоставляете для браузеров, вообще не поддерживающих аплеты;
• name – необязательный атрибут, используемый для спецификации имени экземпляра аплета. Аплеты должны именоваться таким образом, чтобы другие аплеты на той же странице могли находить их по именам и взаимодействовать с ними. Чтобы получить аплет по имени, используется метод get. Applet(), определенный в интерфейсе Applet. Context; • width и height – обязательные атрибуты, задающие размер (в пикселях) отображаемой области аплета; • align – необязательный атрибут, задающий выравнивание аплета. Этот атрибут трактуется точно так же, как в html-дескрипторе img, и имеет следующие значения: left, right, top, bottom, middle; • vspace и hspace – необязательные атрибуты. vspace специфицирует пространство в пикселях над и под аплетом, a hspace – пространство в пикселях по бокам аплета; • param name и value – дескриптор param позволяет указывать специфичные для аплета аргументы на html-странице. Аплеты получают доступ к этим атрибутам посредством метода get. Parameter().
<applet code=“My. Applet” width=“ 200” height=“ 100”> </applet> Класс Applet • обеспечивает всю необходимую поддержку для выполнения аплета, такую как его запуск и останов; • предоставляет методы для загрузки и отображения графических образов, а также методы для загрузки и воспроизведения аудиоклипов; • обеспечивает всю необходимую поддержку деятельности на основе окон. Applet расширяет AWT-класс Panel. В свою очередь, Panel расширяет Container, который расширяет Component. Все эти классы обеспечивают поддержку графического оконного интерфейса на базе Java.
Методы, определенные в Applet void destroy() – вызывается браузером непосредственно перед уничтожением аплета. Можно переопределить этот метод, если нужно выполнить некоторые действия по очистке перед уничтожением аплета. string get. Appletinfo() – возвращает строку, описывающую аплет. Audioclip get. Audio. Clip(URL url) – возвращает объект Audio. Clip, инкапсулирующий аудиоклип, находящийся в месте, специфицированном url. Audio. Clip get. Audio. Clip(URL url, String clip. Name) – возвращает объект Audio. Clip, инкапсулирующий ayдиоклип, находящийся в месте, специфицированном url, и имеющий имя, указанное в clip. Name. URL get. Code. Base() – возвращает URL, ассоциированный с вызывающим аплетом. URL get. Document. Base() – возвращает URL html-документа, вызвавшего аплет.
Image get. Image(URL url, String image. Name) – возвращает объект Image, инкапсулирующий графическое изображение, найденное в месте, указанном в url, и имеющий имя, указанное в image. Nаmе. Locale get. Locale() – возвращает объект Locale, используемый различными чувствительными к локализации классами и методами. String get. Parameter(String param. Name) – возвращает параметр, ассоциированный c param. Name. Если указанный параметр не найден, возвращается null. String[][] get. Parameterinfo() – возвращает таблицу String, описывающую параметры, распознаваемые аплетом. Каждое вхождение в таблице должно состоять из трех строк, содержащих имя параметра, описание его типа и/или диапазон, а также все необходимые пояснения. Image get. Image(URL url) – возвращает объект Image, инкапсулирующий графическое изображение, найденное в месте, указанном в url. void init() – вызывается при запуске выполнения аплета.
boolean is. Active() – возвращает true, если аплет запущен. Возвращает false, если аплет был остановлен. void play(URL url) – если аудиоклип найден в месте, указанном url, он выполняется. void play(URL url, string clip. Name) – если аудиоклип по имени clip. Name найден в месте, указанном url, он выполняется. void resize(int width, int height) – изменяет размер аплета согласно измерениям, указанным в width и height. void showstatus(String str) – отображает str в строке состояния окна браузера или средства просмотра аплетов. Если браузер не поддерживает строку состояния, то ничего не происходит. void start() – вызывается браузером, когда аплет должен начать (или возобновить) выполнение. void stop() – вызывается браузером для приостановки выполнения аплета. Будучи остановленным, аплет перезапускается вызовом start().
Архитектура аплетов Аплет – это оконная программа, и потому его архитектура отличается от консольных программ. • Аплеты управляются событиями. Аплет ожидает, пока не произойдет событие. Исполняющая система извещает аплет о событии, вызывая обработчик события, предоставленный аплетом. Как только это случилось, аплет должен предпринять соответствующие действия и немедленно возвратить управление. • Только пользователь инициирует взаимодействие с аплетом. Эти взаимодействия отсылаются аплету в виде событий, на которые тот должен отреагировать. Например, когда пользователь щелкает кнопкой мыши внутри окна аплета, генерируется событие щелчка. Если пользователь нажимает клавишу, когда окно аплета имеет фокус ввода, генерируется событие нажатия клавиши.
Скелет аплета Все аплеты, кроме только наиболее тривиальных, переопределяют методы, обеспечивающие базовые механизмы взаимодействия браузера или средства просмотра аплетов с самим аплетом и управляющие его выполнением. Методы init(), start(), stop() и destroy() применимы ко всем аплетам. Предусмотрены реализации по умолчанию всех этих методов. Аплеты на базе AWT также переопределяют метод paint(), который определен в классе Component. Этот метод вызывается, когда вывод аплета должен быть заново отображен.
import java. awt. *; import java. applet. *; public class Applet. Skel extends Applet { public void init() { // инициализация } public void start() { // запускает или возобновляет выполнение } public void stop() { // приостановка выполнения } public void destroy() { // выполняет завершающие действия } public void paint (Graphics g) // перерисовка содержимого окна } }
Порядок вызова методов после запуска аплета браузером (средством просмотра аплетов): 1. init() 2. start() 3. paint() Когда работа аплета прекращается, происходит следующая последовательность вызовов: 1. stop() 2. destroy() init() Метод init() – первый в цепочке вызовов. Именно в нем необходимо инициализировать переменные. На протяжении времени выполнения аплета этот метод вызывается лишь однажды. start() Метод start() вызывается после init(). Он также вызывается для перезапуска аплета после его останова. Поэтому если пользователь покидает web-страницу, а затем возвращается обратно, каждый раз аплет возобновляет свою работу в методе start().
paint(Graphics g) Метод paint() вызывается каждый раз, когда вывод аплета должен быть перерисован. Эта ситуация возникает в нескольких случаях. Например, окно, в котором выполняется аплет, может быть перекрыто другим окном, а затем вновь открыто. Или же окно аплета может быть минимизировано, а затем восстановлено. Метод paint() также вызывается, когда аплет начинает выполнение. Метод paint() принимает один параметр типа Graphics. Этот параметр будет содержать графический контекст, описывающий графическую среду, в которой выполняется аплет. Этот контекст используется всякий раз, когда запрашивается вывод аплета. stop() Метод stop() вызывается, когда web-браузер покидает html-документ, содержащий аплет. Например, когда осуществляется переход на другую страницу. destroy() Метод destroy() вызывается, когда среда определяет, что аплет должен быть полностью удален из памяти. В этот момент нужно освободить все ресурсы, которые мог использовать аплет. Вызову метода destroy() всегда предшествует вызов stop().
Пример аплета import java. awt. *; import java. applet. Applet; public class Simple. Applet extends Applet { String msg; public void init() { set. Background(Color. green); set. Foreground(Color. red); msg = "Inside init( ) —"; } public void start() { msg += " Inside start( ) —"; } public void paint(Graphics g) { msg += " Inside paint( ). "; g. draw. String(msg, 20, 50); } }
import – операция импортирования классов import java. awt. *; программа импортирует все классы из пакета java. awt (вложенные пакеты не импортируются) import java. applet. Applet; программа импортирует один класс Applet из пакета java. applet extends – операция наследования public class Simple. Applet extends Applet объявление класса Simple. Applet с наследованием (расширением) от класса Applet
set. Background(Color. green); данный метод устанавливает цвет фона для окна аплета set. Foreground(Color. red); данный метод устанавливает цвет переднего плана для окна аплета Color. green статическое поле класса Color, которое можно использовать без создания экземпляра класса g. draw. String(msg, 20, 50); вызов метода draw. String класса Graphics для вывода строки msg по координатам (20, 50) в окне аплета
Пример html-документа <html> <head><title>For example applets</title></head> <body> <div style="border-style: ridge; border-color: #33 cc 33; height: 100; width: 300"> <applet code="Simple. Applet" width="300" height="100"> </applet> <div </body> </html>
Создание аплета в стандартной среде разработки Для начала необходимо создать файл. java и написать в нем код программы. Имя данного файла обязательно должно совпадать с именем главного класса программы. Главный класс программы обязательно должен иметь описатель ограничения доступа public. В нашем случае главный класс имеет имя Simple. Applet, и именно так мы должны назвать файл с кодом программы.
Набираем код программы файла Simple. Applet. java в любом удобном текстовом редакторе.
Затем переносим файл Simple. Applet. java в рабочую папку стандартной среды разработки JDK. Путь к папке по умолчанию для Java. SE 6. 0 Update 25 – “c: Program FilesJavajdk 1. 6. 0_25bin”. Для того, чтобы получить исполняемый файл. class c байт-кодом, необходимо скомпилировать файл с исходным кодом программы с помощью программы javac. exe. Для этого запускаем командную консоль из рабочей папки среды разработки и выполняем следующую команду: >javac Simple. Applet. java
В случае успеха в рабочей папке создастся файл Simple. Applet. class. Теперь для просмотра аплета в действии нам необходимо встроить его в html-файл. Для этого можно воспользоваться любой удобной средой для работы с htmlдокументами. Создадим файл с именем Applet. html.
Applet. html можно открыть с помощью любого web-браузера.
Также можно воспользоваться средством просмотра аплетов, входящим в состав стандартной среды разработки. В этом случае снова воспользуемся командной консолью, выполнив следующую команду: >appletviewer Applet. html
Создание аплета в среде разработки Net. Beans После открытия главного окна среды выбираем Файл > Создать проект.
В появившемся окне в списке Проекты выбираем Приложение Java. На следующем шаге задаем имя проекта, например Applets, снимаем опцию Создать главный класс и жмем Готово.
После возвращения к главному окну среды разработки Net. Beans слева во вкладке Проекты на элементе Applets→Пакеты исходных файлов → <пакет по умолчанию> вызываем контекстное меню, в котором выбираем Создать →Класс Java.
В появившемся окне задаем имя класса Simple. Applet и жмем Готово.
В инспекторе кода пишем код аплета.
Затем для получения файла. class аплета нажимаем F 9 или выбираем в меню Выполнить → Компилировать файл.
Скомпилированный файл Simple. Applet. class аплета находится в папке проектов среды разработки Net. Beans – …DocumentsNet. Beans. ProjectsAppletsbuildclasses