- •Лекция 1. Вступление в Java. Средства разработки программ. План
- •Лекция 2. Структуры и типы данных в Java. План
- •Лекция 3. Классы и методы в Java. Операция финализации в Java. План
- •Лекция 4. Апплеты в Java. План
- •Лекция 5. Модель обработки событий Java1.0. Реализация графического интерфейса в Java. План
- •Лекция 7. Безопасность в Java. План
- •Принципы многопоточного программирования. Состояния потоков.
- •Создание потока.
- •Синхронизация потоков.
- •Лекция 6. Многопоточное программирование в Java. План
- •Принципы многопоточного программирования. Состояния потоков.
- •Создание потока.
- •Синхронизация потоков.
Лекция 4. Апплеты в Java. План
Апплеты. Характеристики апплетов в Java.
Структура апплета.
Тэги апплета.
Обработка событий апплета.
Обработка событий мыши.
Обработка событий клавиатуры.
Методы апплетов.
1.
В пакете Java.applet есть класс Applet, который содержит несколько методов, позволяющих полностью управлять апплетом. Любой апплет обязательно является подклассом класса Applet и должен импортировать пакеты Java.applet и Java.awt. Пакет Java.awt обеспечивает поддержку интерфейса апплета.
Апплет обладает двумя свойствами:
апплетами управляют события: Java.awt сообщает апплету о событии, вызывая обработчик событий, который перекрыт апплетом; апплет выполняет некоторые действия и передает управление пакету Java.awt.
взаимодействие с апплетом инициализирует пользователь: он посылает сообщения апплету в виде событий, на которые апплет реагирует соответствующим образом.
2.
Все апплеты перекрывают набор методов, которые обеспечивают основной механизм обращения браузера к апплету и управление его выполнением.
Всего методов 5:
init();
start();
stop();
destroy();
paint() – определен в классе Component пакета Java.awt.
Первые четыре метода определены в классе Applet.
Пример реализации апплета:
import java.applet.*;
import java.awt.*;
class Simple extends Applet{
public void init(){…}
public void start(){…}
public void stop(){…}
public void destroy(){…}
public void paint (Graphics g){…}
}
Алгоритм работы апплета следующий:
Сначала вызывается метод init(), он конструирует апплет и вызывается лишь однажды в момент создания апплета; инициализация переменных делается в нем.
Следующим вызывается метод start(), лишь раз после метода init(), а также каждый раз, когда апплет повторно вызывается браузером.
Далее вызывается метод paint() всякий раз, когда необходимо перерисовать окно апплета: есть один параметр, который содержит графический контекст, описывающий графическую среду, в которой описывается апплет. Контекст используется каждый раз, когда апплету требуется отобразить некоторую информацию на экране.
При завершении работы апплета вызывается метод stop(); вызывается при остановке апплета, когда браузер покидает данную страницу html; при его вызове апплет еще работает.
При завершении работы апплета для его разрушения вызывается и метод destroy(), после его вызова возобновить работу апплета невозможно.
Иногда может встречаться метод update(), который определен в пакете Java.awt. Он может вызываться в том случае, когда требуется перерисовать часть окна апплета. По умолчанию, update() сначала заполняет окно апплета цветом фона, а затем вызывает метод paint().
Существует метод, который позволяет обновлять информацию в окне апплета – repaint(): определен в пакете Java.awt и заставляет систему сначала вызвать метод update(). Данный метод имеет 4 формы:
void repaint() – перерисовывается окно целиком;
void repaint(int x, int y, int w, int h) – перерисовывается часть окна, где x,y – координаты верхнего угла, w – ширина, n – высота (размеры в пикселях);
void repaint (lang задержка) в миллисекундах;
void repaint ( lang задержка, int x, int y, int w, int h).
где lang – задержка в миллисекундах, которая должна пройти перед вызовом метода update().
При использовании 3 и 4 метода надо проявлять осторожность, т.к. может произойти ситуация, когда время прошло, а метод update() не вызывается (окно не перерисовывалось).
3.
<Applet>
[Codebase = базовый URL]
{code – имя файла с расширением класса}
[ALT=сообщение]
{сообщение, которое выводится браузером, если он не может отобразить апплет}
[NAME=имя_экземпляра]
{используется, когда на первой странице несколько апплетов}
WIDTH=пиксели (ширина)
HEIGHT=пиксели (высота)
[ALIGN=выравнивание]
[VSPACE=пиксели] [HSPACE=пиксели]>
{VSPACE – пространство над и под областью вывода апплета, а HSPACE – справа и слева от области вывода апплета}
[PARAM NAME=имя VALUE=значение>]
{если необходимо передать в апплет некоторые параметры}
</Applet>
Доступ к параметрам апплета получают с помощью метода getParameter (“name”), где name – имя параметра. Этот метод возвращает значение параметра в виде объекта string.
4.
Все события передаются апплету с помощью различных методов, зависящих от характера события. Все события инкапсулированы в классе Event, которые являются частью Java.awt и определяют несколько переменных, описывающих событие (x,y – координаты мыши в момент генерации события).
Хотя вся информация и содержится в Event и в любой момент доступна в программе, многие события не требуют прямого доступа к Event, т.к. awt автоматически передает обработку событий клавиатуры и мыши различным определенным методом.
5.
Класс Applet наследует эти методы от класса Component. При обработке события метод должен возвращать true, если же событие не обрабатывается, то false. Т.е. все методы возвращают значение типа boolean.
mouseDown() – при нажатии кнопки мыши;
mouseDrag() – когда мышь перемещается при нажатой кнопке;
mouseEnter() – при перемещении указателя мыши на окно;
mouseExit() – при перемещении указателя мыши из окна;
mouseMove() – при перемещении мыши;
mouseUp() – при отпуске кнопки мыши.
Методы имеют три параметра:
параметр типа Event – объект, описывающий данное событие;
int x, int y – координаты указателя мыши в момент генерации события.
6.
Если окно апплета владеет фокусом ввода, то при нажатии клавиш генерируется события клавиатуры, которые обрабатываются следующими методами:
KeyUp() – при отжатии клавиш клавиатуры;
KeyDown () – при нажатии на клавишу клавиатуры.
Методы содержат два параметра:
параметр типа Event – событие;
int x – код нажатой клавиши.
Класс Applet наследует эти методы от класса Component. При обработке события метод должен возвращать true, если же не обрабатывается событие, то false. Т.е. все методы возвращают значение типа boolean.
7.
Java позволяет апплетам загружать данные из каталога, содержащего html-файл запуска апплета, и из каталога, содержащего файл класса апплета. Эти каталоги возвращаются как объекты класса URL (в пакете java.net) методами getDocumentBase() – вернет URL каталога, в котором находиться html-файл запуска апплета; и getCodeBase() – возвращает URL каталога, в котором находиться файл класса апплета.
Одним из преимуществ языка Java считают возможность использования для перемещения по web активных изображений и анимации вместо привычных гипертекстовых ссылок.
Для того, чтобы апплет мог передавать управление другому URL, необходимо использовать метод showDocument(), который определен в интерфейсе Context. Данный интерфейс позволяет получить информацию из среды выполнения апплета. Контекст используемого в настоящий момент апплета можно получить при помощи метода getAppletContext(), который определен в классе Applet.
После получения контекста апплета можно вызвать другой документ при помощи метода showDocument(). Он не возвращает никакого значения и не генерирует исключительных ситуаций при неисправной работе. Он имеет 2 формы:
showDocument(URL url) – вызывает документ по данному URL;
showDocument(URL, позиция) – вызывает документ в указанной позиции окна браузера.
Позиция может иметь следующие значения:
self – в текущее окно браузера;
parent – в родительское окно;
top – в самое верхнее окно;
blank – в новое окно браузера
позиция может иметь значения имени окна, в которое должен загружаться документ.
Пример:
import java.applet.*;
import java.awt.*;
import java.net.*;
public class Demo extends Applet{
string msg;
public.void start(){
msg = “Щелкните мышью”;
}
public boolean mouseDown(Event evtobj, int x, inty){
AppletContaxt ac = getAppletContext();
try{
ac.showDocument(new URL(url + “Test html”));
}
Catch
(MalformedURLException e)
{showStatus (“URL not found”);}
return true;
}
//описание метода paint
public void paint(Graphics g){
g.drawstring (msg,10,10);
}
}
Метод showStatus() отображает строку в строке состояния браузера.
