Как известно на Java можно создавать два типа приложений: приложения и апплеты. Апплеты – это небольшие приложения, которые доступны на Internet-сервере, транспортируются по Internet, автоматически устанавливаются и выполняются как часть Web-документа. После того как апплет прибывает к клиенту, он имеет ограниченный доступ к ресурсам системы, которые использует для создания произвольного мультимедийного интерфейса пользователя и выполнения комплексных вычислений без риска заражения вирусами или нарушения целостности данных. Работа с апплетами поддерживается пакетом AWT. Этот пакет достаточно большой, что позволяет работать не только с апплетами. Пакет AWT содержит многочисленные классы и методы, которые позволяют создавать окна и управлять ими.
Рассмотрим более подробно указанный пакет AWT.
Пакет AWT
AWT – Abstract Window Toolkit – абстрактный оконный интерфейс. Основное назначение пакета AWT: поддержка окон апплета и создание обычных
GUI-приложений. Классы пакета AWT определяют интерфейсные окна и работу с визуальными компонентами окон и содержатся в пакете java.awt.
На рисунке представлен фрагмент иерархии классов AWT. Практически все классы пакета AWT являются потомками абстрактного класса Component.

Рассмотрим особенности программирования апплетов. В последних лабораторных работах рассмотрим более подробно другие классы пакета AWT.
Класс Applet
Для работы с апплетами предназначен класс Applet, который определяет методы, представленные в таблицу. Applet обеспечивает всю необходимую поддержку для выполнения апплетов, такую как запуск и остановка. Он также реализует методы, которые загружают и показывают изображения, и методы, которые загружают и проигрывают аудио-клипы.
| Метод | Описание |
| void destroy() | Освобождает все ресурсы, занятые апплетом. Вызывается браузером непосредственно перед тем, как апплет завершается.Метод destroy() вызывается, когда среда решает, что апплет должен быть полностью удален из памяти. В этот момент следует освободить любые ре¬сурсы, которые апплет может использовать. |
| String getParameter(String paramName) | Возвращает параметр, указанный в paramName. Если указанный параметр не найден, возвращается null (пустой указатель) |
| void init() | Вызывается, когда апплет начинает выполнение. Это первый метод, который вызывается для любого апплета. В нем необходимо инициализировать переменные. Вызывается этот метод один раз в течение времени выполнения апплета. |
| boolean isActive() | Возвращает true, если апплет был запущен. Возвращает false, если апплет был остановлен. |
| void resize(Dimension dim) | Изменяет размеры апплета согласно измерениям, указанным в dim. |
| void start() | Вызывается, чтобы перезапустить апплет после его остановки. В то время как init() вызывается один раз (когда апплет загружается), start() запускается каждый раз, когда HTML-документ апплета отображается на экране. Так, если поль¬зователь покидает Web-страницу и возвращается обратно, апплет возобновляет выполнение в start(). |
| void stop() | Метод stop() вызывается, если Web-браузер покидает HTML-документ, содержащий апплет, при переходе к другой странице. Когда вызывается stop(), апплет, вероятно, продолжает выполняться. Следует использовать stop() для приостановки потоков, не требующих выполнения, если апплет невидим. Их можно перезапустить вызывом start(), когда пользователь возвращается к странице. Метод stop() всегда вызывается перед destroy(). |
Инициализация и завершение апплета
Важно понять порядок, в котором вызываются различные методы апплета. Когда апплет начинает выполняться, AWT вызывает методы в такой последовательности:
1) init(); 2) start(); 3) paint();
При завершении апплета имеет место следующая последовательность вызовов:
1)stop(); 2) destroy();
Запуск апплетов
Апплет можно запускать как из HTML-документа, так и из программы просмотра апплета. Для этого используется тег <applet> языка HTML. Программа просмотра апплета выполняет каждый <applet>-тeг, который она находит, в отдельном окне, в то время как Web-браузеры Netscape Navigator, Internet Explorer и HotJava допускают много апплетов на одной странице.
Покажем синтаксис тега <applet>. Параметры в квадратных скобках не обязательны.
<applet
[CODEBASE = codebaseURL]
CODE = appletFile
[ALT = altemateText]
[NAME = appletInstanceName]
WIDTH = pixels HEIGHT = pixels
[ALIGN = alignment]
[VSPACE = pixels] [HSPACE = pixels]
>
[< param NAME = AttributeName value = AttributeValue>]
[< param NAME = AttributeName2 value= AttributeValue>]
[HTML Displayed in the absence of Java]
</applet>
CODE − обязательный параметр, который задает имя файла, содержащего откомпилированный файл (с расширением .class) вашего апплета.
WIDTH и HEIGHT − это обязательные параметры, которые задают размер области показа апплета (в пикселах).
ALIGN − необязательный параметр, который определяет выравнивание апплета. Возможные значения: left, right, top, bottom, middle, BASELINE, TEXTTOP, ABSMTODLE и ABSBOTTOM.
<param> (с параметрами NAME= и VALUE=) – тег, позволяющий указывать на HTML-странице параметры, специфические для данного апплета. Апплет получает доступ к этим параметрам с помощью метода getParameter().
Пример Web-странички, на которой размещен апплет DemoApplet.class:
Рисование линий в апплете
Линии рисуются методом drawLine() формата:
void drawLine (int startx, int startY, int endX, int endY)
Данный метод отображает линию (в текущем цвете рисования), которая начинается в координатах startX, startY и заканчивается в endX, endY. Пример использования метода:
public void paint(Graphics g) {
g.drawLine(0, 0, 100, 100);
}
Рисование прямоугольников в апплете
Методы drawRect() и fillRect() отображают соответственно рисованный и заполненный прямоугольник. Их форматы:
void drawRect(int top, int left, int width, int height)
void fillRect(int tap, int left, int width, int height)
Координаты левого верхнего угла прямоугольника задаются в параметрах top и left, width и height, указывающих размеры прямоугольника (в пикселах).
public void paint(Graphics g)
{ g.drawRect(10, 10, 60, 50);
g.fillRect(100, 10, 60, 50);
}
Рисование эллипсов и кругов в апплете
Для рисования эллипса используется drawOval(), а для его заполнения – fillOval(). Эти методы имеют форматы:
void drawOval(int top, int left, int width, int height)
void fillOval(int top, int left, int width, int height)
Пример:
public void paint(Graphics g)
{ g.drawOval(10, 10, 50, 50);
g.fillOval(100, 10, 75, 50);
}
Рисование дуг в апплете
Дуги можно рисовать методами drawArc() и fillArct(), используя форматы:
void drawArc(int top, int left, int width, int height, int начало, int конец)
void fillArc(int top, int left, int width, int height, int начало, int конец)
public void paint(Graphics g) {
g.drawArc(0, 40, 70, 70, 0, 75);
g. fillArc (0, 40, 70, 70, 0, 75); }
Работа с цветом
Работа с цветом поддерживается классом Color. В Color определено несколько цветовых констант (например color.black), специфицирующих ряд обычных цветов. Возможно также создание собственных цветов, применением одного из цветовых конструкторов. Обычно используются следующие его форматы:
Пример:
new Color(255, 100, 100); // светло-красный
По умолчанию графические объекты рисуются в текущем цвете переднего плана. Можно изменить этот цвет, вызывая метод setColor() класса Graphics:
void setColor(Color newColor)// параметр newColor определяет новый цвет рисунка
Вызывая метод getColor(), возможно получение текущего цвета.
Следующий пример демонстрирует рисование «Домика» в апплете.
//Листинг файла DrawHouseApplet.java
import java.awt.*;
import java.applet.*;
public class DrawHouseApplet extends Applet {
//функция прорисовки апплета
public void paint(Graphics g) {
g.setColor(Color.DARK_GRAY);
g.drawLine(50, 150, 200, 50);
g.drawLine(200, 50, 350, 150);
g.drawLine(350, 150, 50, 150);
g.drawLine(50, 150, 200, 50);
g.drawLine(200, 50, 350, 150);
g.drawLine(350, 150, 50, 150);
g.drawRect(100, 150, 200, 200);
g.drawLine(50, 150, 200, 50);
g.drawLine(200, 50, 350, 150);
g.drawLine(350, 150, 50, 150);
g.drawRect(100, 150, 200, 200);
g.drawRect(170, 200, 60, 100);
g.drawLine(50, 150, 200, 50);
g.drawLine(200, 50, 350, 150);
g.drawLine(350, 150, 50, 150);
g.drawRect(100, 150, 200, 200);
g.drawRect(170, 200, 60, 100);
g.drawLine(200, 200, 200, 300);
g.drawLine(170, 250, 230, 250);
g.setColor(Color.MAGENTA);
g.drawString("Домик", 190, 30); }
}
Откомпилируйте файл DrawHouseApplet.java. Для этого можно использовать команду javac DrawHouseApplet.java. Потом создайте файл, листинг которого приведен ниже. Запустите его с помощью браузера.
Результаты работы апплета показаны на рисунке

В программе ниже демонстрируется рисование строк и графических объектов разными цветами в апплете.
import java.awt.*;
import java.applet.*;
public class AppletSample extends Applet {
int poly_x[]={140,180,180,140,100,100,140};//x-координаты
//для полигона
int poly_y[]={205,225,245,265,245,225,205};//y-координаты
//для полигона
public void paint(Graphics g) {
g.setColor(Color.yellow);//выбрать желтый цвет
g.drawString("Yellow Color", 10, 30 );//нарисовать текст желтым
// цветом
g.drawLine(100, 30, 100, 100);//нарисовать линию
g.drawRect(200, 30, 60, 50);//нарисовать прямоугольник
g.fillRect(200, 30, 60, 50);//нарисовать заполненный прямоугольник
g.setColor(Color.red);//выбрать красный цвет
g.drawString("Red Color", 10, 130 );//нарисовать текст желтым
//цветом
g.drawOval(100, 130, 50, 50); //нарисовать овал
g.fillOval(200, 130, 75, 50);//нарисовать заполненный овал
g.drawArc(300, 130, 70, 70, 0, 75);//нарисовать дугу окружности
g.fillArc(400, 130, 70, 70, 0, 75);//нарисовать заполненную дугу
Color c1 = new Color(100, 100, 255);//создать собственный цвет
g.setColor(c1);//выбрать собственный цвет
g.drawString("Own Color", 10, 200 );//нарисовать текст собственным
//цветом
g.drawPolygon(poly_x,poly_y,poly_x.length);//нарисовать многоугольник
}
}
Листинг AppletSample.html
Результат работы показан на рисунке






