Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
300
Добавлен:
24.02.2016
Размер:
931.84 Кб
Скачать

Апплет Неllo, управляемый мышью

Класс Applet содержит большое количество методов, которые вызываются в ответ на действия пользователя (например, перемещение курсора мыши в пределах окна или нажатие определеннх клавиш на клавиатуре). Для обработки событий, получаемых во время взаимодействия с Java-программой, используется так называемаямодель делегирования событий. Мы рассмотрим вопросы, связанные с обработкой событий позже, а пока приведем в качестве примера использование события, связанного с нажатием на кнопку мыши в пределах области, занятой апплетом. Усовершенствованная программа Hello перерисовывает строчку текста в той точке, где пользователь щелкнул мышью.

/*------------- Пример 8. Файл Hello.java -------------*/

import javax.swing.event.MouseInputAdapter;

import java.applet.*;

import java.awt.*;

import java.awt.event.MouseEvent;

public class Hello extends Applet

{ int curX=50, curY=50;

MouseInputAdapter p;

public Hello()

{

p = new MouseInputAdapter(){

public void mousePressed(MouseEvent e) {

curX=e.getX(); curY=e.getY();

repaint();

}};

this.addMouseListener(p);

}

public void init()

{ resize(640,480);

}

public void paint(Graphics g)

{ g.drawString("Hello, WWW",curX,curY);

}

}

/*-----------------------------------------------------------*/

Следует обратить внимание, что в методе mousePressed вызывается метод repaint(). Этот метод сообщает оболочке времени выполнения, что необходимо обновить изображение в окне. В примере жирным шрифтом выделен код, связанный с обработкой события. В приведенном коде используется анонимный класс, созданный на основе класса MouseInputAdapter, в котором переопределен метод mousePressed. Следует обратить внимание, что в методе mousePressed вызывается метод repaint(). Этот метод сообщает оболочке времени выполнения, что необходимо обновить изображение в окне и вызывает методpaint. Хорошей практикой программирования является отображение всей информации в окне именно с помощью методаpaint.

Основные методы класса Applet

В методе init()по умолчанию вызывается метод resize(), определенный в суперклассе. При помощи этого оператора изменяются размеры окна апплета, установленные в параметрах тега <APPLET>. При желании редактировать размеры окна апплета через тег <APPLET> документа HTML можно удалить вызов метода resize() из метода init().

Перед удалением апплета из памяти вызывается метод destroy()(метод, обратный методу init()), определенный в классе Applet как пустая заглушка. В методеdestroy можно выполнить все необходимые операции перед удалением апплета. Например, если в методе init() создавались какие-либо задачи, то в методе destroy() их можно завершить.

Метод start()вызывается после метода init() в тот момент, когда пользователь начинает просматривать документ HTML со встроенным в него апплетом. Методstart() можно модифицировать, если при каждом посещении пользователем страницы с апплетом необходимо выполнять какую-либо инициализацию.

Обратным методу start()является методstop().Он вызывается, когда пользователь покидает страницу с апплетом и загружает в окно навигатора другую страницу. Этот метод вызывается перед вызовом методаdestroy().Методstop()можно дополнить кодом, который должен работать при остановке апплета.

Метод paint()выполняет рисование в окне апплета. Определение этого метода находится в классе java.awt.Component. Так как класс Applet является подклассом класса Component (см. иерархию классов апплетов), а класса HelloApplet - подклассом Applet, то методpaint()можно переопределить в классе HelloApplet.

Метод paint()вызывается, когда необходимо перерисовать окно апплета. Перерисовка окна апплета обычно выполняется асинхронно по отношению в работе апплета (подобно перерисовке клиентской части окон Windows-приложений при поступлении сообщения WM_PAINT). В любое время апплет должен быть готов перерисовать содержимое своего окна.

Методу paint()в качестве параметра передается ссылка на объект классаGraphics. По своему смыслу этот объект напоминает контекст отображения, который используется для вывода информации в Windows-окно. Контекст отображения - это как лист бумаги, на котором можно рисовать изображение или выводить текст. Многочисленные методы класса Graphics позволяют задавать различные параметры вывода, такие, например, как цвет или шрифт.

Для вывода изображения апплеты используют координатную систему, которая соответствует режиму MM_TEXT - одному из режимов, использующихся при программирование для Windows. Начало этой системы координат расположено в левом верхнем углу окна аплета, ось X направлена слева направо, а ось Y - сверху вниз.

Упрощенный вариант исходного текста апплета HelloApplet

Исходный текст апплета HelloApplet в упрощенном виде приведен ниже:

******************************************************************

// HelloApplet.java: Applet

//

//*****************************************************************

import java.applet.*;

import java.awt.*;

//================================================

// Основной класс для апплета HelloApplet

//

//================================================

public class HelloApplet extends Applet

{

// Обработчик процедуры рисования окна апплета HelloApplet

//--------------------------------------------------------------------------

public void paint(Graphics g)

{

g.drawString("Created with Developer",10, 20);

}

}

В представленном фрагменте удалены методы, не выполняющие никакой полезной работы. Апплет HelloApplet будет при этом работать также как и раньше, потому как удаленные методы все равно определены в суперклассе Applet,

Однако метод paint() переопределить нужно в любом случае, так как именно в нем выполняется рисование - специализированная часть работы апплета HelloApplet.