РиАТ_лаб5. Лабораторная работа 5 Разработка апплета
Скачать 182.74 Kb.
|
РиАТ, 2013 Лабораторная работа № 5 Разработка апплета Цель работы: научиться разрабатывать и тестировать апплет, созданный на основе библиотеки AWT, познакомиться со способом создания потока в приложении, с графическими возможностями AWT. Задание 1. Прочитать справочный материал. 2. Запустить терминал - апплета будет создаваться без использования среды разработки. 3. Разработать простейший вариант апплета без эффекта анимации, использующий графические примитивы библиотеки AWT, изображения из файлов. 4. Откомпилировать апплет. 5. Подготовить html-файл, выполняющий запуск апплета. Предусмотреть средство для отображения границ апплета в окне браузера. 6. Проверить работу апплета с помощью приложения appletviewer. 7. Проверить работу апплета в браузере. 8. Разработать вариант апплета с эффектом анимации, определить действия при старте апплета, его перерисовке, остановке. 9. Повторить действия из пп.4-7. 10. Представить отчёт следующего содержания: • Постановка задачи; • Тексты с исходным кодом; • Описание используемых стандартных классов Java и AWT. • Копии экранов. • Методика тестирования (какое программное обеспечение применялось). Справочный материал Что такое апплет Апплет - это небольшое приложение на языке Java, предназначенное для передачи через интернет и выполнения в браузере. Апплеты используют графический интерфейс пользователя, поэтому для создания создания апплетов используются библиотеки элементов пользовательского интерфейса AWT (Abstract Window Toolkit) или Swing. В данной работе для создания апплета используется библиотека AWT. Для выполнеения апплета не требуется функция main(). Апплет — это программа, управляемая событиями. Источником события чаще всего выступает пользователь. Информация о наступлении некоторого события передается апплету, при этом вызывается соответствующий событию обработчик, предусмотренный в апплете. Обработка событий в данной работе не рассматривается. Создание простейшего апплета Создадим простейший апплет, который выводит в своем окне текст. Апплет создается на основе класса Applet: 1 РиАТ, 2013 import java.awt.*; //подключение библиотеки AWT import java.applet.*; public class Applet1 extends Applet{ public void paint(Graphics g){ g.setColor(Color.cyan); g.drawString("Апплет!",20,20); } } Класс Applet является готовым к использованию классом, который содержит набор необходимых при программировании апплетов методов. Для того, чтобы получить доступ к этим методам, мы определяем класс Applet в качестве базового класса нашего апплет-класса. Полезными качествами этих методов является то, что браузер самостоятельно вызывает их при работе с апплетом: • метод init() вызывается, когда браузер загружает апплет; • метод start() – когда браузер запускает апплет; • метод paint() – когда браузер требует, чтобы апплет нарисовал себя; • метод stop() – когда браузер останавливает апплет, например, если пользователь прекращает просмотр Web-сайта или переходит на другой Web-сайт; • метод destroy() – вызывается перед тем, как браузер окончательно выгрузит апплет из оперативной памяти. Метод paint() выполняет отрисовку окна апплета. Все графические операции выполняются в контексте графического устройства, представленного объектом класса Graphics. В данном примере выполняются две графические операции: изменение цвета рисования setColor() и вывод строки в графическом режиме drawString(). Функции drawString() передаются три параметра: текст выводимой строки и две координаты ее начала относительно левого верхнего угла окна апплета. Тестирование и запуск апплета Для тестирования и запуска апплет следует откомпилировать. Тестирование и запуск апплета можно осуществить в специальной программе, входящей в JDK и запускаемой в командной строке, - appletviewer или в браузере. Для выполнения апплета необходимо создать html-файл, в котором содержится код для запуска апплета: Атрибут code содержит имя исполняемого class-файла. Атрибуты width и height определяют размер окна апплета. Если апплет расположен не в той директории, что и HTML- документ, необходимо дополнительно установить атрибут codebase и указать в нем абсолютный или относительный путь к файлу. Запуск апплета в appletviewer осуществляется через созданный html-файл: > appletviewer MyApp.html Запуск апплета в браузере также осуществляется через открытие html-файла, но браузер необходимо настроить таким образом, чтобы он мог интерпретировать Java-код. Если в исходный код апплета добавить html-код запуска апплета (в виде комментария), то для тестирования в appletviewer можно передать файл Applet1.java: import java.awt.*; //подключение библиотеки AWT 2 РиАТ, 2013 import java.applet.*; /* */ public class Applet1 extends Applet{ public void paint(Graphics g){ g.setColor(Color.cyan); g.drawString("Апплет!",20,20); } } Запуск для тестирования: > appletviewer Applet1.java Графические средства библиотеки AWT Класс Applet содержит метод paint(), предназначенный для описания действий по отрисовке апплета в окне браузера. Рисование выполняется при помощи объекта класса Graphics — контекста экрана, представляющего область для рисования апплета. Все графические операции выполняются при участии объекта класса Graphics. Класс Graphics предоставляет набор методов для рисования. Метод рисования Описание clearRect(int x, int y, int width, int height) Заполняет фоновым цветом прямоугольник, который определяется координатами своего левого верхнего угла (x,y), шириной width и высотой height drawArc(int, int, int, int, int, int) Рисует дугу drawLine(int x1, int y1, int x2, int y2) Рисует линию, которая соединяет точки (x1, y1 ) и (x2, y2) drawOval(int x, int y, int width, int height) Рисует овал. Переданные параметры определят прямоугольник, в который будет вписан овал: (x, y) является координатами левого верхнего угла прямоугольника, width -его ширина, height - высота. Если высота и ширина равны, то будет нарисован квадрат. drawPolygon(int [] xPoints, int [] yPoints, int numPoints) Рисует полигон, состоящий из numPoints линий. Координаты точек, между которыми рисуются линии, определяются массивами xPoints и yPoints. Последняя линия соединяет точки, являющиеся первыми и последними в массивах drawRect(int x, int y, int width, int height) Рисует прямоугольник: (x,y) является координатами левого верхнего угла прямоугольника, width - его ширина, height - высота. Если высота и ширина равны, то будет нарисован квадрат drawRoundRect(int x, int y, int Рисует прямоугольник с закругленными 3 РиАТ, 2013 width, int height, int arcW, int arcH) углами, параметры arcW и arcH определяют горизонтальный и вертикальный диаметр закруглений углов drawString(String str, int x, int y) Выводит на экран строку str, начиная от точки с координатами (x, y) fillOval(), fillPolygon(), fillRect()… Набор методов, которые рисуют не контуры (методы draw…), а залитые цветом фигуры Color getColor() Возвращает текущий цвет рисования Font getFont() Возвращает текущий используемый шрифт setColor(Color) Устанавливает цвет, который используется при рисовании символов. Цвет может выбираться из значений, которые определены как константы в Java-библиотеках: Color.black, Color.blue, Color.cyan, Color.darkGrey, Color.gray, Color.green, Color.lightGray, Color.magenta, Color.orange, Color.pink, Color.red, Color.white, Color.yellow. Пример вызова метода, где устанавливается зеленый цвет gc.setColor(Color.green); Так же можно задать цвет по RGB, то есть, указываю долю красного, зеленого и синего цвета. Доля каждого цвета может иметь значения от 0 до 255. Пример, где устанавливается красный цвет: gc.Color(new Color(255, 0, 0) ); setFont(Font) Устанавливает используемый шрифт. Шрифт передается как параметр в виде объекта класса Font: gc.SetFont(new Font ("Times Roman", Font.BOLD Font.Italic, 24)) Конструктор класса Font получает название типа шрифта, также можно указывать предопределенные типы шрифтов: Dialog, DialogInput, Monospaced, Serif, SansSerif и Symbol, стиль шрифта (Font.BOLD, Font.Italic или Font.BOLD Font.Italic) и размер шрифта Пример рисования картинки в апплете: import java.awt.*; import java.applet.*; public class Applet1 extends Applet{ Image art; public void init(){ art = getImage(getDocumentBase(), getParameter("img")); } public void paint(Graphics g){ g.drawImage(art,0,0,this); // рисование картинки } } 4 РиАТ, 2013 В классе Applet1 переопределен метод init(), выполняющий инициализацию апплета. Класс Image предназначен для работы с картинкой, хранящейся в файле. Свойство art класса Image предназначено для получения информации о графическом файле, содержащем картинку, инициализируется в init() с помощью метода getParameter(), значение атрибута которого определяет источник картинки. Имя файла, содержащего картинку, задается в html-файле. В html-файл следует добавить параметр апплета — имя используемого графического файла: Класс Thread и интерфейс Runnable Для запуска апплета с эффектом анимации необходимо создать отдельный поток внутри класса апплета. В основе многопоточной обработки данных в Java лежат класс Thread и интерфейс Runnable. Класс Thread инкапсулирует поток исполнения. Чтобы создать новый поток, нужно создать новый класс, являющийся наследником класса Thread или реализующий интерфейс Runnable. Методы класса Thread void run() - определяет точку входа в поток, void start() - запускает поток, вызывая метод run(), static void sleep(long t) — приостанавливает исполнение потока на t миллисекунд. Класс Thread имеет несколько конструкторов, в т.ч. конструктор, принимающий в качестве параметра интерфейс Runnable и его производные. Апплет с анимацией должен реализовывать интерфейс Runnable. Интерфейс Runnable содержит метод run(), который аналогичен по своим действиям функции main() - это точка входа в поток. Для создания потока в классе необходимо определить функцию run(). Создание апплета с эффектом анимации Создадим апплет, в котором происходит перемещение овала в горизонтальном направлении. В класс апплета включим свойства: t — дополнительный поток, stopFlag — служит для остановки апплета, x и y — текущие координаты овала. import java.awt .*; import java.applet.*; /* */ public class Applet1 extends Applet implements Runnable{ Thread t; boolean stopFlag; int x,y; public void init(){ //инициализация данных апплета t = null; 5 РиАТ, 2013 x=10; y=10; } public void start(){ // запуск апплета t = new Thread(this); // создание объекта-потока в апплете stopFlag=false; t.start(); } // Метод run() - точка входа в поток. Выполняет в цикле // перерисовку окна апплета - метод repaint(), // который, в свою очередь, вызывает метод paint(). // На каждой итерации проверяется состояние флага stopFlag. public void run(){ for(;;){ try{ repaint(); Thread.sleep(250); // приостановка потока if(stopFlag) break; } catch(InterruptedException exc){} } } // Остановка потока public void stop(){ stopFlag=true; t=null; } // Метод paint() рисует овал в точке с координатами x и y // и меняет значение этих переменных. public void paint(Graphics g){ g.setColor(Color.cyan); g.drawOval(x,y,25,20); if(x<70) x+=10; } } 6 |