Апплеты и работа с графикой

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

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

applet_1

Рассмотрим особенности программирования апплетов. В последних лабораторных работах рассмотрим более подробно другие классы пакета 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>
CODEBASE − необязательный параметр, который определяет базовый URL-адрес кода апплета. Базовый URL — это каталог, в котором будет разыскиваться исполняемый файл апплета (имя этого файла указывается параметром CODE).
CODE − обязательный параметр, который задает имя файла, содержащего откомпилированный файл (с расширением .class) вашего апплета.
WIDTH и HEIGHT − это обязательные параметры, которые задают размер области показа апплета (в пикселах).
ALIGN − необязательный параметр, который определяет выравнивание апплета. Возможные значения:  leftrighttopbottommiddle, BASELINE, TEXTTOP, ABSMTODLE и ABSBOTTOM.
<param> (с параметрами NAME= и VALUE=) – тег, позволяющий указывать на HTML-странице параметры, специфические для данного апплета. Апплет получает доступ к этим параметрам с помощью метода getParameter().
Пример Web-странички, на которой размещен апплет DemoApplet.class:
<html>
<head>
<title> DemoApplet</title>
</head>
<applet CODE="DemoApplet.class" WIDTH ="500" HEIGTH="500">
</applet> </html>

 

Рисование линий в апплете
Линии рисуются методом 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 конец)
Дуга ограничена прямоугольником; левый верхний угол прямоугольника определяется параметрами top, left, а ширина и высота — параметрами width и height. Дуга рисуется от начала до углового расстояния, указанного в конец. Углы указываются в градусах и отсчитываются от горизонтальной оси против часовой стрелки. Дуга рисуется против часовой стрелки, если конец положителен, и по часовой стрелке, если конец отрицателен. Поэтому, чтобы нарисовать дугу от 12-часового до 6-часового положений, начальный угол должен быть 90° и угол развертки 180°.
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), специфицирующих ряд обычных цветов. Возможно также создание собственных цветов, применением одного из цветовых конструкторов. Обычно используются следующие его форматы:

Color (int red,   int green,   int blue)
Color (int rgbValue)
Color(float red, float green, float blue)

Пример:

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. Потом создайте файл, листинг которого приведен ниже. Запустите его с помощью браузера.

<HTML>
<HEAD>
</HEAD>
<BODY BGCOLOR="000000">
<CENTER>
<APPLET code = "DrawHouseApplet.class" width = "500"
height = "300">
</APPLET>
</CENTER>
</BODY>
</HTML>

Результаты работы апплета показаны на рисунке

applet_2

В программе ниже демонстрируется рисование строк и графических объектов разными цветами в апплете.

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

<HTML>
<HEAD>
</HEAD>
<BODY BGCOLOR="000000">
<CENTER>
<APPLET
code = "AppletSample.class"
width = "500"
height = "300"
>
</APPLET>
</CENTER>
</BODY>
</HTML>

Результат работы показан на рисунке

applet_3

 

Добавить комментарий


Защитный код
Обновить

Разработчику

Скрипты