Обработка событий элементов интерфейса пользователя в языке Java
Пользователь, располагая прикладным окном, оперирует для связи с программой интерфейсными элементами, каждый из которых способен генерировать событие. К таким элементам относится уже используемая нами мышь, но также кнопки, флажки, списки с выбором, пункты меню, полосы прокрутки, клавиши клавиатуры, текстовые редакторы и прикладное окно, генерирующее события при изменении его размера, при его закрытии и др.
Эти элементы представляются в программе в виде объектов соответствующих классов, в которые встроен механизм делегирования, предполагающий применение определённых интерфейсов и предопределённых функций. Причём, ради простоты, не требуется наследовать класс события, соответствующего элементу, поскольку он запретил бы наследовать более значимый класс, определяющий основное функционирование объекта. Но обязательно надо наследовать некоторый интерфейс, предписанный для данного элемента.
Пакет java.awt.event содержит следующие классы событий интерфейсных объектов, которые определяют множество констант, свойств и функций, используемых с соответствующими элементами: ActionEvent, AdjustimentEvent, ComponentEvent, FocusEvent, InputEvent, ItemEvent, KeyEvent, MouseEvent, TextEvent и WindowEvent.
Приёмники событий (которые также называют блоками прослушивания) должны наследовать интерфейсы соответствующих интерфейсных объектов. Определены следующие интерфейсы прослушивания событий: ActionListener, AdjustmentListener, ComponentListener, ContainerListener, FocusListener, ItemListener, KeyListener, MouseListener, MouseMotionListener, TextListener и WindowListener. Эти интерфейсы включают предопределённые обработчики событий. Например, интерфейс ActionListener включает предопределённый обработчик actionPerformed(), а интерфейс WindowListener включает предопределённые обработчики windowClosed(), windowClosing(), windowOpened() и др.
Так же как при уведомлении обозреватели подписывают на наблюдаемый объект с помощью функции addObserver(), так и в случае интерфейсных элементов приёмники (блоки прослушивания) подписывают на источник с помощью специальной функции класса источника, которая имеет вид:
public void аddTypeListener (TypeListener tL);
где Type- тип источника события.
При наступлении события источника выполняется предопределённый обработчик подписавшегося приёмника.
Обработка событий мыши на языке Java, используя интерфейс MouseListener
Из предыдущего раздела явствует, что для подписки приёмника прослушивания на событие мыши необходимо в качестве типа источника события Type в общей записи
public void аddTypeListener (TypeListener tL);
взять Mouse. Полученная функция
public void аddMouseListener (MouseListener tL);
применена в примере 9.5.2.
Пример 9.5.2. Обработка событий мыши на Java, используя интерфейс MouseListener.
///////////////
// Javaи J# Вариант 2(Вариант 1 смотрите в примере 10.4.3)
import java.awt.*;
import java.awt.event.*;
// Класс прикладного окна
public class MainClass extends Frame implements MouseListener
{
// Предопределённые обработчики интерфейса MouseListener
public void mouseClicked (MouseEvent mE){}
public void mouseEntered (MouseEvent mE){}
public void mouseExited (MouseEvent mE){}
public void mouseReleased (MouseEvent mE){}
// Выполнить предопределённый обработчик mousePressed мыши
Public void mousePressed (MouseEvent mE)
{
System.out.println ("Mouse: x= " + mE.getX ( )
+ " y= " + mE.getY( ));
}
public static void main () // Главная функция
{
MainClass mC= new MainClass ( );
mC.setSize (new Dimension (400, 200));
mC.setTitle ("Hello");
mC.show ( );
mC.addMouseListener(mC);
}
}
///////////////
// Javaи J# Вариант 3
import java.awt.*;
import java.awt.event.*;
// Класс прикладного окна
public class MainClass extends Frame implements MouseListener
{
public MainClass ( )
{
this.setSize (new Dimension (400, 200));
this.setTitle ("Hello");
this.addMouseListener (this);
}
// Предопределённые обработчики интерфейса MouseListenerмыши
public void mouseClicked (MouseEvent mE){}
public void mouseEntered (MouseEvent mE){}
public void mouseExited (MouseEvent mE){}
public void mouseReleased (MouseEvent mE){}
// Выполнить предопределённый обработчик mousePressed мыши