Использование контейнера (не рекомендуется)




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

Интерфейсы Обработчики события (Событие) Возникает (генерируется)
ActionListener actionPerformed(ActionEvent e) при нажатии кнопки; двойном щелчке клавишей мыши по элементам списка; при выборе пункта меню
AdjustmentListener adjustmentValueChanged(AdjustmentEvent e) при изменении полосы прокрутки
ComponentListener componentResized(ComponentEvent e) componentMoved(ComponentEvent e) componentShown(ComponentEvent e) componentHidden(ComponentEvent e) если компонент скрыт, перемещен, изменен в размере или становится видимым;
ContainerListener componentAdded(ContainerEvent e) componentRemoved(ContainerEvent e)  
FocusListener focusGained(FocusEvent e) focusLost(FocusEvent e) компонент получает или теряет фокус ввода
ItemListener itemStateChanged(ItemEvent e) при выборе элемента из списка
KeyListener keyPressed(KeyEvent e) keyReleased(KeyEvent e) keyTyped(KeyEvent e) ввода с клавиатуры
MouseListener mouseClicked(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e) mouseEntered(MouseEvent e) mouseExited(MouseEvent e) события мыши
MouseMotionListener mouseDragged(MouseEvent e) mouseMoved(MouseEvent e)  
TextListener textValueChanged(TextEvent e) изменение текстового поля
WindowListener windowOpened(WindowEvent e) windowClosing(WindowEvent e) windowClosed(WindowEvent e) windowIconified(WindowEvent e) windowDeiconified(WindowEvent e) windowActivated(WindowEvent e)  

public abstract class WindowAdapter

implements WindowListener, WindowStateListener, WindowFocusListener {

windowOpened(WindowEvent e) {}

windowClosing(WindowEvent e) {}

windowClosed(WindowEvent e) {}//пустая реализация методов

и т.д.…………

}

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

для обработки происходящих в окне событий используются объекты-обработчики. Объект, в котором может произойти событие, должен иметь ссылку на объект, обрабатывающий это событие.

Для обработки событий создаются классы, на основе которых затем создаются объекты-обработчики событий.

AWT

 

SWING

 

 

 

this не рекомендуется, т.к. усложняет код

 

 

 

frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

В результатевызоваэтогометодаприложение полностью завершает свою работупри закрытии окна.

Поэтому, при закрытии одного из окон закрываются все окна этого приложения.!!

Допустимые константы:

 

DISPOSE_ON_CLOSE

HIDE_ON_CLOSE

DO_NOTHING_ON_CLOSE

 

 

 

 

 

 

 

 

рисование линиями с помощью клавиш со стрелками и букв h, j, k, l. Shift – по 5 пикселей.

объектный тип Character – автоприведение к char.

public static final int VK_DOWN вклассе public class KeyEvent.

 

 


 

 

 

Взаимодействие пользователя с графическим интерфейсом реализуется черезобработку событий. Под событием подразумевают любое действие, производимое с графическим компонентом, например щелчок на кнопке, изменение размеров окна, выделение текстового поля для ввода значения с клавиатуры и т. д.

Объект, в котором возникло событие, называется источником события. Привозникновении события в Javaавтоматически создается объект события (длякаждого события существует класс, описывающий его, и эти классы образуютиерархию). Объект события содержит описание этого события. Фактически, обработка события подразумевает обработку его объекта.

 

Обработка любого события (нажатие кнопки, щелчок мышью и др.) состоит в связывании события с методом, его обрабатывающим. Принцип обработки событий, начиная с Java 2, базируется на модели делегирования событий.

В этой модели имеется блок прослушивания события (EventListener), который ждет поступления события определенного типа от источника, после чего обрабатывает его и возвращает управление. Источник – это объект, который генерирует событие, если изменяется его внутреннее состояние, например, изменился размер, изменилось значение поля, произведен щелчок мыши по форме или выбор значения из списка. После генерации объект-событие пересылается для обработки зарегистрированному в источнике блоку прослушивания как параметр его методов – обработчиков событий.

Блоки прослушивания Listener представляют собой объекты классов, реализующих интерфейсы прослушивания событий, определенных в пакете java.awt.event. Соответствующие методы, объявленные в используемых интерфейсах, необходимо явно реализовать при создании собственных классов прослушивания. Эти методы и являются обработчиками события. Передаваемый источником блоку прослушивания объект-событие является аргументом обработчика события. Объект класса – блока прослушивания события необходимо зарегистрировать в источнике методом источник. add Событие Listener(объект_прослушиватель);

После этого объект-прослушиватель (Listener) будет реагировать именно на данное событие и вызывать метод «обработчик события». Такая логика обработки событий позволяет легко отделить интерфейсную часть приложения от функциональной, что считается необходимым при проектировании современных приложений. Удалить слушателя определенного события можно с помощью ме-тода remove Событие Listener().

Источником событий могут являться элементы управления: кнопки (JButton, JCheckbox, JRadioButton), списки, кнопки-меню. События могут генерироваться фреймами и апплетами, как mouse- и key-события. События генерируются окнами при развертке, сворачивании, выходе из окна. Каждый класс-источник определяет один или несколько методов add Событие Listener() или наследует эти методы

Когда событие происходит, все зарегистрированные блоки прослушивания уведомляются и принимают копию объекта события. Таким образом источник вызывает метод-обработчик события, определенный в классе, являющемся блоком прослушивания, и передает методу объект события в качестве параметра. В качестве блоков прослушивания на практике используются внутренние классы. Вэтом случае в методе, регистрирующем блок прослушивания в качестве параметра, используется объект этого внутреннего класса.

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

 

Класс InputEvent является абстрактным суперклассом событий ввода (для клавиатуры или мыши).

Чтобы реализовать методы-обработчики событий, связанных с клавиатурой, необходимо определить три метода, объявленные в интерфейсе KeyListener. При нажатии клавиши генерируется событие со значением KEY_PRESSED. Это приводит к запросу обработчика событий keyPressed(). Когда клавиша отпус-кается, генерируется событие со значением KEY_RELEASED и выполняется обра-ботчик keyReleased(). Если нажатием клавиши сгенерирован символ, то по-сылается уведомление о событии со значением KEY_TYPED и вызывается обра-ботчик keyTyped().

Для регистрации события приложение-источник из своего объекта должно вызвать метод addКеуListener(KeyListener el ),

 

 

Общая схема обработки событий, используемая в Java, называется схемой с делегированием. В отличие от другой популярной схемы, где при появлении события опрашиваются все доступные обработчики событий, в схеме с делегированием для всех объектов, в которых могут происходить и будут обрабатываться события, явно указывается обработчик события.

Перечисленные в табл. классы описывают события. Для каждого из событий существует специальный интерфейс создания класса обработки события.

Для обработки этих событий создают классы, расширяющие интерфейс обработчика этого события. Названия интерфейсов для обработки событий связаны с названиями классов соответствующих событий. Чтобы получить название интерфейса, в имени соответствующего класса необходимо вместо слова Eventвставитьслово Listener.

Например, для события класса WindowEvent интерфейс обработчика имеет название WindowListener. Исключением из этого правила является класс InputEvent — для этого события собственного интерфейса нет. Таким образом, для обработки события необходимо расширением соответствующего интерфейса создать класс обработки события, а затем объект этого класса.

Далее, при создании компонента, в котором предполагается обрабатывать данное событие, необходимо оставить ссылку на объект, позволяющий обработать событие. Делается это с помощью специальных методов. Названия методов формируются, как и названия интерфейсов, на основе названий классов событий. Имя метода начинается словом add, далее следует имя события и слово Listener.

Например, для связывания компонента с обработчиком события WindowEvent используют метод addWindowListener(). Аргументом метода указывается объект обработчика события.

 

Классы-адаптеры

Реализация всех методов–обработчиков событий, объявленных в интерфейсах, не всегда необходима. Чтобы не реализовывать все методы из соответствующих интерфейсов при создании классов – блоков прослушивания событий, используются классы-адаптеры. Такой класс содержит пустую реализацию всех методов из интерфейсов прослушивания событий, которые он расширяет. При этом определяется новый класс – блок прослушивания событий, который расширяет один из имеющихся адаптеров и реализует только те события, которые требуется обрабатывать.

Например, класс MouseMotionAdapter имеет два метода: mouseDragged() и mouseMoved(). Сигнатуры этих пустых методов точно такие же, как в интерфейсе MouseMotionListener. Если существует заинтересованность только в событиях перетаскивания мыши, то можно просто расширить адаптер MouseMotionAdapter и переопределить метод mouseDragged() в своем классе. Событие же перемещения мыши обрабатывала бы реализация метода mouseMoved(), которую можно оставить пустой.

 

 


Использование контейнера (не рекомендуется)

Например, фрейм или панель с кнопками:

 

 

 

 

 

 

Рефакторинг

 

addWindowListener(newMyAdapter()); - объект создается в параметре метода

 

addWindowListener(newWindowAdapter () {

publicvoidwindowClosing(WindowEventwe){ System.exit(0);}}) - использование анонимного класса обработчика события.

 


 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-05-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: