<p><strong>Апплеты</strong></p>

До сих пор мы создавали приложения (applications), работающие самостоятельно (standalone) в JVM под управлением графической оболочки операционной системы. Эти приложения имели собственное окно верхнего уровня типа Frame, зарегистрированное в оконном менеджере (window manager) графической оболочки.

Кроме приложений язык Java позволяет создавать апплеты (applets). Это программы, работающие в среде другой программы — браузера. Апплеты не нуждаются в окне верхнего уровня — таким окном служит окно браузера. Апплеты не запускаются с помощью JVM — их загружает браузер, который сам запускает JVM для выполнения апплета. Эти особенности отражаются на написании программы апплета.

С точки зрения графической библиотеки AWT, апплет — это всякое расширение класса Applet, который, в свою очередь, расширяет класс Panel. Таким образом, апплет — это панель специального вида, контейнер для размещения компонентов с дополнительными свойствами и методами. Менеджером размещения компонентов по умолчанию, как и в классе Panel, служит FlowLayout. Класс Applet находится в пакете j ava. applet, в котором кроме него есть только три интерфейса, реализованные в браузере. Надо заметить, что не все браузеры реализуют эти интерфейсы полностью.

В графической библиотеке Swing всякий апплет расширяет класс JApplet, расширяющий класс Applet. Главные дополнения Swing к свойствам апплета AWT заключаются в возможности добавления системы меню методом setJMenuBar(JMenuBar) и в наличии множества панелей, как в классе JFrame. На панели, получаемой методом getContentPane (), по умолчанию установлен менеджер размещения BorderLayout.

Еще одна особенность апплета, вытекающая из того, что он не запускается машиной JVM, заключается в том, что отпадает необходимость в методе main (), его нет в апплетах.

В апплетах редко встречается конструктор. Дело в том, что при запуске апплета создается его контекст. Во время выполнения конструктора контекст еще не сформирован полностью, поэтому не все начальные значения удается определить в конструкторе.

Начальные действия, обычно выполняемые в конструкторе и методе main (), в апплете записываются в метод init () класса Applet. Этот метод автоматически запускается исполняющей системой Java браузера сразу же после загрузки апплета. Вот как он выглядит в исходном коде класса Applet:

public void init(){}

Негусто! Метод init () не имеет аргументов, не возвращает значения и должен переопределяться в каждом апплете — подклассе класса Applet.

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

Кроме методов init () и destroy() в классе Applet присутствуют еще два пустых метода, выполняющихся автоматически. Браузер должен обращаться к методу start () при каждом появлении апплета на экране и обращаться к методу stop(), когда апплет уходит с экрана. В методе stop () можно определить действия, приостанавливающие работу апплета, в методе start () — возобновляющие ее. Надо сразу же заметить, что не все браузеры обращаются к этим методам как должно. Работу указанных методов можно пояснить простым житейским примером.

Приехав весной на дачный участок, вы прокладываете водопроводные трубы, прикручиваете краны, протягиваете шланги — выполняете метод init () для своей оросительной системы. После этого, приходя летом на участок, вы включаете краны — запускаете метод start (), а уходя, выключаете их — выполняете метод stop (). Наконец, осенью вы разбираете оросительную систему, отвинчиваете краны, просушиваете и укладываете водопроводные трубы — выполняете метод destroy().

Все эти методы в апплете необязательны. В листинге 18.1 записан простейший апплет библиотеки AWT, выполняющий вечную программу HelloWorld.

Листинг 18.1. Апплет HelloWorld

import java.awt.*; import java.applet.*;

public class HelloWorld extends Applet{ public void paint(Graphics g){

g.drawString("Hello, XXI century World!", 10, 30);

}

}

Эта программа записывается в файл HelloWorldjava и компилируется как обычно:

javac HelloWorld.java

Компилятор создает файл HelloWorld.class, но воспользоваться для его выполнения интерпретатором j ava теперь нельзя — нет метода main (). Вместо интерпретации надо дать указание браузеру для запуска апплета.

Все указания браузеру даются пометками, тегами (tags), на языке HTML (HyperText Markup Language). В частности, указание на запуск апплета дается в теге . В нем обязательно задается имя файла с классом апплета параметром code, ширина width и высота height панели апплета в пикселах. Полностью текст HTML для нашего апплета приведен в листинге 18.2.

Листинг 18.2. Файл HTML ДЛЯ загрузки апплета HelloWorld

Applet

Перейти на страницу:

Все книги серии В подлиннике

Похожие книги