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

События и их обработка

Для того, чтобы взаимодействовать с пользователем в реальном масштабе времени и отслеживать изменения в оболочке времени выполнения Java, программы используют понятие событие (event). Событие- это информация, сгенерированная в ответ на некоторые действия пользователя (перемещение мыши, нажатие клавиши мыши или клавиши на клавиатуре). События также могут быть сгенерированы в ответ на изменение среды - к примеру, когда окно апплета заслоняется другим окном.

В современной технологии Javaиспользуется так называемое делегирование событий. При этом программист сообщает системе приблизительно следующее: «Если произойдет событие такого-то типа, оповести об этом следующий объект». После этого система ждет указанного события, а если оно возникает, то оповещает об этом специальные объекты, называемые объектами прослушивания или обработчиками событий.

Обработчики событий от мыши

Для обработки событий от кнопок мыши используется тип MouseListener. На самом деле это интерфейс. Для обработки этих событий надо, чтобы класс реализовывал указанный интерфейс, то есть в классе должны быть реализованы методы этого интерфейса. Если в интерфейсе более одного метода, то можно использовать класс адаптера, который реализует указанный интерфейс, от этого класса-адаптера можно наследовать какой-то класс, а в нем переопределить только тот метод, который нужен.

Затем надо просто к объекту, который может генерировать события определенного вида добавить объект созданного класса с помощью метода addТип_СобытияListener. Здесь Тип_События – это илиKeyилиMouseдля обработки события указанного типа.

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

Добавим в наш апплет такую обработку событий, чтобы при щелчке мышью изображение перемещалось бы в точку щелчка.

Для этого в метод initдобавим следующий код:

MouseInputAdapter pm;

pm = new MouseInputAdapter(){

public void mousePressed(MouseEvent e) {

x=e.getX(); y=e.getY();

System.out.println(x);

repaint();

}};

this.addMouseListener(pm);

Здесь Создается объект класса MouseInputAdapter,в котором переопределен один метод – реакция на нажатие кнопки мыши. Здесь запоминаются координаты курсора мыши, а затем вызывается методpaintприrepaint();

При этом в поля класса апплета добавлены xиy, а в методеpaintотрисовка картинки выполняется по указанным координатам. Ниже приведен код апплета, в котором для упрощения убрана часть, связанная с двойной буферизацией.

Пример 12.Обработка событий в апплете

importjavax.swing.event.MouseInputAdapter;

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class MouseEvent extends Applet

{

Image pic; // изображение из файла

boolean picLoaded=false; // было ли полностью загружено

private String m_FileName = "simple.gif";

int x=0, y=0;

private final String PARAM_String_1 = "fileName";

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

public MouseEvent()

{

// Сделать: Добавьте сюда код конструктора

}

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

public String getAppletInfo()

{

return "Name: MouseEvent \r\n" +"";

}

public String[][] getParameterInfo()

{

String[][] info =

{

{ PARAM_String_1, "fileName", "name of file" },

};

return info;

}

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

public void init()

{

String param;

param = getParameter(PARAM_String_1);

if (param != null)m_FileName = param;

pic=getImage(getDocumentBase(),m_FileName);

MouseInputAdapter pm;

pm = new MouseInputAdapter(){

public void mousePressed(MouseEvent e) {

x=e.getX(); y=e.getY();

System.out.println(x);

repaint();

}};

this.addMouseListener(pm);

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

public void paint (Graphics g)

{

g.drawImage(pic,x,y,this);

g.drawString("Applet with Parameters",10, 20);

}

}

Метод mousePressed() вызывается всякий раз при нажатии мыши. Обратите внимание на тот факт, чтоpm– объект анонимного класса, созданного на основе классаMouseInputAdapter,а в списке сгенерированных классов появился еще один классcименем –AppletWithParam$1. О том, что такое анонимные классы, см. в курсе лекций.