Цель, требования и рекомендации к выполнению задания

Лабораторная работа №3

Апплеты

Апплеты это маленькие прикладные программы на языке Java, которые размещаются на серверах Internet, транспортируются клиенту по сети, автоматически устанавливаются и запускаются на месте как часть документа WWW. Апплеты позволяют вставлять в документ, распространяемый по сети, поля, содержание которых меняется во времени (например, текущая дата, текущий курс валюты и т.п.), организовывать в нем "бегущие строки", мультипликацию.

Цель, требования и рекомендации к выполнению задания - student2.ru

Рис. 1. Выполнение Java-апплета

.Апплетами могут быть небольшие прикладные программы, распространяемые по Web, такие как калькулятор, преобразователь алгебраических выражений, вычислитель интегралов для первокурсников, различные игры и т.п. Апплеты компилируются в байт-код на компьютере их разработчика и распространяются по Web в виде байткодных файлов.

Проблема безопасности

Суть проблемы в том, что апплет - это, как правило, программа, полученная из внешнего источника. Соответственно, она опасна. По злому умыслу или из-за ошибки она может нанести вред. Более того, апплет как бы составляет одно целое с web-страничкой и для пользователя может быть даже не совсем очевидно, что безобидная web-страница скрывает за собой потенциально опасный программный код.

В целях безопасности апплеты, по умолчанию, сильно ограничены в своих правах. Эти ограничения определяются настройками конкретного браузера. Они могут быть ослаблены самим пользователем как в отношении всех апплетов, так и для конкретных апплетов.

Ограничений достаточно много, но мы рассмотрим только основные из них.

Апплеты не могут ни читать, ни писать на локальный диск. Они могут передавать информацию только в тот адрес, откуда загружен апплет. Окно апплета специально выделяется или делается какая-то другая пометка для того, чтобы пользователь представлял себе, что он имеет дело с апплетом, а не с обычной web-страницей.

Создание апплетов

Техника написания апплетов базируется на классе JApplet пакета javax.swing.

Этот класс имеет много своих методов и ряд методов, унаследованных от класса Applet. Однако, их изучение по документации мало что даст для овладения техникой построения апплетов. Просто нужно знать, как построить апплет при помощи этих методов.

Для построения апплета нужно создать класс - наследник класса JApplet и переопределить в нем ряд методов класса Applet. В классе JApplet эти методы реализованы как пустые заглушки, которые ничего не делают. При работе апплета внутри браузера он вызывает эти методы в определенных ситуациях. Если мы определим свои методы, то браузер вызовет их, а не методы класса Applet.

Рассмотрим эти методы.

public void init()

Вызывается браузером сразу после загрузки аплета перед первым вызовом метода start(). Этот метод нужно переопределять практически всегда, если в аплете требуется хоть какая-то инициализация.

public void start()

Вызывается браузером при каждом "посещении" данной страницы. Имеется в виду, что можно загрузить данную страницу, потом загрузить другую, не убирая данную, а потом вернуться к данной. Используется обычно в комбинации с методом stop для экономии ресурсов в том случае, например, если апплет выполняет некоторую анимацию. Тогда stop может ее остановить, а start запустить снова.

public void stop()

Вызывается браузером при деактивизации данной страницы как в случае загрузки новой страницы без выгрузки данной, так и в случае выгрузки данной. В последнем случае stop вызывается перед destroy.

public void destroy()

Вызывается браузером перед выгрузкой данной страницы.

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

Апплеты и приложения

Практически любое диалоговое приложение на Java может быть реализовано так, что оно сможет работать и как программа и как апплет (не нужно только забывать об ограничениях, налагаемых на аплпеты по доступу к ресурсам машины).

Ниже приведен порядок, в котором вызываются методы класса Applet, с пояснениями, нужно или нет переопределять данный метод.

Init

Метод init вызывается первым. В нем вы должны инициализировать свои переменные.

Start

Метод start вызывается сразу же после метода init. Он также используется в качестве стартовой точки для возобновления работы после того, как апплет был остановлен. В

то время, как метод init вызывается только однажды—при загрузке апплета, start вызывается каждый раз при выводе HTML-документа, содержащего апплет, на экран. Так, например, если пользователь перейдет к новой WWW-странице, а затем вернется назад к странице с апплетом, апплет продолжит работу с метода start.

Paint

Метод paint вызывается каждый раз при повреждении апплета. AWT следит за состоянием окон в системе и замечает такие случаи, как, например, перекрытие окна апплета другим окном. В таких случаях, после того, как апплет снова оказывается видимым, для восстановления его изображения вызывается метод paint.

Update

Используемый по умолчанию метод update класса Applet сначала закрашивает апплет цветом фона по умолчанию, после чего вызывает метод paint. Если вы в методе paint заполняете фон другим цветом, пользователь будет видеть вспышку цвета по умолчанию при каждом вызове метода update—то есть, всякий раз, когда вы перерисовываете апплет. Чтобы избежать этого, нужно заместить метод update. В общем случае нужно выполнять операции рисования в методе update, а в методе paint, к которому будет обращаться AWT, просто вызвать update.

Stop

Метод stop вызывается в тот момент, когда браузер покидает HTML-документ, содержащий апплет. При вызове метода stop апплет еще работает. Вы должны использовать этот метод для приостановки тех подпроцессов, работа которых необязательна при невидимом апплете. После того, как пользователь снова обратится к этой странице, вы должны будете возобновить их работу в методе start.

Destroy

Метод destroy вызывается тогда, когда среда (например, браузер Netscape) решает, что апплет нужно полностью удалить из памяти. В этом методе нужно освободить все ресурсы, которые использовал апплет.

Repaint

Метод repaint используется для принудительного перерисовывания апплета. Этот метод, в свою очередь, вызывает метод update. Однако, если ваша система медленная или сильно загружена, метод update может и не вызваться. Близкие по времени запросы на перерисовку могут объединяться AWT, так что метод update может вызываться спорадически. Если вы хотите добиться ритмичной смены кадров изображения, воспользуйтесь методом repaint (time)—это позволит уменьшить количество кадров, нарисованных не вовремя.

repaint(time)

Вы можете вызывать метод repaint, устанавливая крайний срок для перерисовки (этот период задается в миллисекундах относительно времени вызова repaint).

repaint (x, у, w, h)

Эта версия ограничивает обновление экрана заданным прямоугольником, изменены будут только те части экрана, которые в нем находятся.

repaint(time, x, у, w, h)

Этот метод—комбинация двух предыдущих.

Цель, требования и рекомендации к выполнению задания

Цель выполнения задания: реализовать соответствующий апплет, осуществить его запуск и выполнение.

Требования и рекомендации к выполнению задания:

  1. проанализировать полученное задание, выделить информационные объекты и действия;
  2. разработать программу апплета с использованием соответствующих элементов (классов) библиотеки Swing, графических элементов и др.;

Задания

Создать апплет по следующим заданиям:

  1. Создать приложение. Поместить на него текстовое поле JTextField, кнопку JButton и метку JLabel. В метке отображать все ввденные символы, разделяя их пробелами.
  2. Поместить в приложение две панели JPanel и кнопку. Первая панель содержит поле ввода и метку "Поле ввода"; вторая - поле вывода и метку "Поле вывода". Для размещения в окне двух панелей и кнопки "Скопировать" использовать менеджер размещения BorderLayout.
  3. Изменить задачу 2 так, чтобы при нажатии на кнопку "Скопировать" текст из поля ввода переносится в поле вывода, а поле ввода очищается.
  4. Задача 2 модифицируется так, что при копировании поля ввода нужно, кроме собственно копирования, организовать занесение строки из поля ввода во внутренний список. При решении использовать коллекцию, в частности ArrayList.
  5. К условию задачи 2 добавляется еще одна кнопка с надписью "Печать". При нажатии на данную кнопку весь сохраненный список должен быть выведен в консоль. При решении использовать коллекцию, в частности TreeSet.
  6. Написать программу для построения таблицы значений функции y = a-√x*cos(ax). Использовать метку JLabel, содержащую текст "Функция: у = a-√x * cos(ax)"; панель, включающую три текстовых поля JTextField, содержащих значения параметра, шага (например, 0.1) и количества точек. Начальное значение х=0. С каждым текстовым полем связана метка, содержащая его название. В приложении должно находиться текстовое поле со скроллингом, содержащее полученную таблицу.
  7. Создать форму с набором кнопок так, чтобы надпись на первой кнопке при ее нажатии передавалась на следующую, и т.д.
  8. Создать форму с выпадающим списком так, чтобы при выборе элемента списка на экране появлялись GIF-изображения, двигающиеся в случайно выбранном направлении по приложению.
  9. В приложении изобразить прямоугольник (окружность, эллипс, линию). Направление движения объекта по экрану изменяется на противоположное щелчком по клавише мыши. При этом каждый второй щелчок меняет цвет фона.
  10. Создать фрейм с изображением окружности. Длина дуги окружности изменяется нажатием клавиш от 1 до 9.
  11. Создать фрейм с кнопками. Кнопки "вверх", "вниз", "вправо", "влево" двигают в соответствующем направлении линию. При достижении границ фрейма линия появляется с противоположной стороны.
  12. Создать фрейм и разместить на нем окружность (одну или не сколько). Объект должен "убегать" от указателя мыши. При приближении на некоторое расстояние объект появляется в другом месте фрейма.
  13. Создать приложение с изображением графического объекта. Объект на экране движется к указателю мыши, когда последний находится в границах приложения.
  14. Изменить задачу 12 так, чтобы количество объектов зависело от размеров приложения и изменялось при "перетягивании" границы в любом направлении.
  15. Промоделировать в приложении вращение спутника вокруг планеты по эллиптической орбите. Когда спутник скрывается за планетой, то не он виден.
  16. Промоделировать в приложении аналоговые часы (со стрелками) с кнопками для увеличения/уменьшения времени на час/минуту.

Пример выполнения задания 1

В данном чисто демонстрационном примере присутствует метка, с надписью "Первый аплет", кнопка и текстовое поле, в которое при нажатии на кнопку выводится текст "Привет".

// AppDemo.java Файл AppDemo.java:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class AppDemo extends JApplet {

JTextField txt = new JTextField(15);

public AppDemo() {}

public void init() {

Container c = getContentPane();

c.setLayout(new FlowLayout());

JLabel lbl = new JLabel("Первый аплет");

c.add(lbl);

JButton btn = new JButton("Нажать один раз");

btn.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

txt.setText("Привет");

}

});

c.add(btn);

c.add(txt);

} }

Отметим одну деталь. Как и для JFrame для JApplet следует добавлять компоненты в панель getContentPane(). Т.е. апплет выглядит очень похоже на обычную диалоговую программу на Java, здесь экран формируется в методе init().

Запуск апплетов

Апплет запускается браузером при просмотре web-страницы, в которой имеется ссылка на этот апплет. Ранее для запуска апплета было достаточно написать совсем простой код в составе HTML-странички. Например, для запуска вышеприведенного AppDemo можно было создать такой файл

<html>

<head><title>First Applet</title></head>

<body>

Какой-то текст на странице

<applet code=AppDemo width=400 height=200>

</applet>

</body>

</html>

Для тех, кто знаком с основами HTML, понять этот код не составит труда. Здесь для подключения апплета использован таг <applet>. Этот таг имеет параметры code, width и height. Ссылка на апплет реализована при помощи параметра code. Если апплет, как рекомендовано, заархивирован в jar-файл, для ссылки на архив нужно использовать параметр archive тага applet. Если попробовать воспользоваться вышеприведенным кодом AppDemo.shtml, то результат будет примерно таким, как показано на рис.4.

Цель, требования и рекомендации к выполнению задания - student2.ru

Рис.2.

Наши рекомендации