Обработка событий

Используется модель делегирования событий. Участвует 3 участника:

1. event source - источник

2. event object – событие

3. event listener - слушатель

Источник генерирует событие и направляет его слушателям. Слушатель ожидает событие и его обрабатывает.

Событие – объект. Суперкласс- java.util.EventOblect. Полезный метод- object.getSource(). Информирует об источнике события.

Для событий AWT(Swing): cобытия -объекты класса java.awt.AWTEvent.

В объекте события хранится:

- ссылка на объект-источник события;

- дополнительная информация (например, координаты мышки).

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

Регистрация производится методом: addХxxListener (XxxListener el)

Xxx – тип события.

public void addActionListener () - для JButton

addKeyListener () – для клавиатуры

addMouseMotionListener () – для перемещения мыши

public void removeXxxListener(XxxListener el) – для отмены регистрации

Эти методы предоставляются источниками событий (т.е. источнтки должны иметь эти методы)

Слушатель событий:

1) должен быть зарегистрирован в объекте – источнике события.

2) должен реализовывать метод для обработки событий (обработчик). Т.е. реализовывать нужный интерфейс.

………implements ActionListener() {….

public actionPerformed (ActionEven ev){…..} ……….//Обработчик события

}

Все методы обработки вызываются из одного потока обработки событий (Т.е. по очереди). Поэтому, метод-обработчик. должен работать быстро, иначе не будет реакции на другие события. Для длительной операции нужно создавать отдельный поток.

Такая организация программ называется CallBack (обратный вызов). Реализован принцип Голливуда-«Не звоните нам, мы Вам сами перезвоним».(Регистрация обработчика-оставили № телефона.Он записался в объекте-источнике события. Произошло событие-объект-источник делает звонок по этому №).

Регистрация обработчиков.

Контейнер – обработчик события (самообработка событий),обработка классом-контейнером

import java.awt.*;

import java.awt.event.*;

import java.swing.*;

class MyNotebook extends JFrame implements ActionListener {

private JTextField tf;//одна строка

private JTextArea ta;// текстовое поле

public MyNotebook (String title) {//конструктор

super (title);

Container c = getContentPane ();

tf = new JTextField (“Введите текст “, 50);

c.add (tf, BorderLayout.NORTH);

ta = new JText Area ();

ta.setEditable (false);

c.add (ta);

JPanel p = new JPanel ();

JButton b = new JButton (“Перенести”);

JButton bс = new JButton (“Очистить”);

p.add (b);

p.add (bс);

c.add (p, Borderlayout.SOUTH);

b.add ActionListener (this);//регистрация

bс.add ActionListener (this);

tf.add ActionListener (this);

setSize (300,200);

setVisible (true);

}

public void actionPerformed (ActionEvent al) {//обработчик событий

if(ae.getSource == bc)

ta.setText(“”);

else

ta.append (tf.getText() + “\n”);

//System.out.println (ae.getSource);//для отладки

}

public static void main (String [] args) {

JFrame f = new MyNotebook (“Обработка событий”);

f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

}

}

Обработка события


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: