В этой главе вы узнаете о событиях, их типах, а также узнаете, как обрабатывать события. Пример приведен в конце главы для лучшего понимания.
Что такое событие?
Изменение состояния объекта известно как событие , т. Е. Событие описывает изменение состояния источника. События генерируются в результате взаимодействия пользователя с компонентами графического интерфейса пользователя. Например, нажатие кнопки, перемещение мыши, ввод символа с клавиатуры, выбор элемента из списка и прокрутка страницы — действия, которые вызывают событие.
Типы событий
События могут быть широко разделены на две категории —
-
События переднего плана — эти события требуют непосредственного взаимодействия с пользователем. Они создаются как последствия взаимодействия человека с графическими компонентами в графическом интерфейсе пользователя. Например, нажатие кнопки, перемещение мыши, ввод символа с клавиатуры, выбор элемента из списка, прокрутка страницы и т. Д.
-
Фоновые события — эти события требуют взаимодействия конечного пользователя. Прерывания операционной системы, аппаратный или программный сбой, истечение таймера и завершение работы — вот некоторые примеры фоновых событий.
События переднего плана — эти события требуют непосредственного взаимодействия с пользователем. Они создаются как последствия взаимодействия человека с графическими компонентами в графическом интерфейсе пользователя. Например, нажатие кнопки, перемещение мыши, ввод символа с клавиатуры, выбор элемента из списка, прокрутка страницы и т. Д.
Фоновые события — эти события требуют взаимодействия конечного пользователя. Прерывания операционной системы, аппаратный или программный сбой, истечение таймера и завершение работы — вот некоторые примеры фоновых событий.
Что такое обработка событий?
Обработка событий — это механизм, который контролирует событие и решает, что должно произойти в случае возникновения события. Этот механизм имеет код, который известен как обработчик событий, который выполняется, когда происходит событие.
Java использует модель событий делегирования для обработки событий. Эта модель определяет стандартный механизм для генерации и обработки событий.
Модель делегирования событий включает в себя следующих ключевых участников.
-
Источник — Источник — это объект, на котором происходит событие. Источник отвечает за предоставление информации о произошедшем событии своему обработчику. Java предоставляет нам классы для исходного объекта.
-
Слушатель — Он также известен как обработчик событий. Слушатель отвечает за генерацию ответа на событие. С точки зрения реализации Java слушатель также является объектом. Слушатель ждет, пока не получит событие. Как только событие получено, слушатель обрабатывает событие и затем возвращается.
Источник — Источник — это объект, на котором происходит событие. Источник отвечает за предоставление информации о произошедшем событии своему обработчику. Java предоставляет нам классы для исходного объекта.
Слушатель — Он также известен как обработчик событий. Слушатель отвечает за генерацию ответа на событие. С точки зрения реализации Java слушатель также является объектом. Слушатель ждет, пока не получит событие. Как только событие получено, слушатель обрабатывает событие и затем возвращается.
Преимущество этого подхода состоит в том, что логика пользовательского интерфейса полностью отделена от логики, которая генерирует событие. Элемент пользовательского интерфейса может делегировать обработку события отдельному куску кода.
В этой модели слушатель должен быть зарегистрирован в исходном объекте, чтобы слушатель мог получить уведомление о событии. Это эффективный способ обработки события, поскольку уведомления о событиях отправляются только тем слушателям, которые хотят их получить.
Шаги, вовлеченные в обработку событий
Шаг 1 — Пользователь нажимает кнопку, и событие генерируется.
Шаг 2 — Объект соответствующего класса событий создается автоматически, и информация об источнике и событии заполняется одним и тем же объектом.
Шаг 3 — Объект события перенаправляется в метод зарегистрированного класса слушателя.
Шаг 4 — Метод выполняется и возвращается.
Что нужно помнить о слушателе
-
Чтобы спроектировать класс слушателя, вы должны разработать несколько интерфейсов слушателя. Эти интерфейсы Listener прогнозируют некоторые публичные абстрактные методы обратного вызова, которые должны быть реализованы классом listener.
-
Если вы не реализуете ни один из предопределенных интерфейсов, то ваш класс не может выступать в качестве класса слушателя для исходного объекта.
Чтобы спроектировать класс слушателя, вы должны разработать несколько интерфейсов слушателя. Эти интерфейсы Listener прогнозируют некоторые публичные абстрактные методы обратного вызова, которые должны быть реализованы классом listener.
Если вы не реализуете ни один из предопределенных интерфейсов, то ваш класс не может выступать в качестве класса слушателя для исходного объекта.
Методы обратного вызова
Это методы, предоставляемые провайдером API и определяемые программистом приложения и вызываемые разработчиком приложения. Здесь методы обратного вызова представляют метод события. В ответ на событие java jre запустит метод обратного вызова. Все такие методы обратного вызова предоставляются в интерфейсах слушателей.
Если компонент хочет, чтобы какой-либо слушатель прослушивал его события, источник должен зарегистрировать себя для слушателя.
Пример обработки событий
Создайте следующую Java-программу, используя любой редактор по вашему выбору, скажем, D: /> SWING> com> tutorialspoint> gui>
SwingControlDemo.java
package com.tutorialspoint.gui; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SwingControlDemo { private JFrame mainFrame; private JLabel headerLabel; private JLabel statusLabel; private JPanel controlPanel; public SwingControlDemo(){ prepareGUI(); } public static void main(String[] args){ SwingControlDemo swingControlDemo = new SwingControlDemo(); swingControlDemo.showEventDemo(); } private void prepareGUI(){ mainFrame = new JFrame("Java SWING Examples"); mainFrame.setSize(400,400); mainFrame.setLayout(new GridLayout(3, 1)); headerLabel = new JLabel("",JLabel.CENTER ); statusLabel = new JLabel("",JLabel.CENTER); statusLabel.setSize(350,100); mainFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent windowEvent){ System.exit(0); } }); controlPanel = new JPanel(); controlPanel.setLayout(new FlowLayout()); mainFrame.add(headerLabel); mainFrame.add(controlPanel); mainFrame.add(statusLabel); mainFrame.setVisible(true); } private void showEventDemo(){ headerLabel.setText("Control in action: Button"); JButton okButton = new JButton("OK"); JButton submitButton = new JButton("Submit"); JButton cancelButton = new JButton("Cancel"); okButton.setActionCommand("OK"); submitButton.setActionCommand("Submit"); cancelButton.setActionCommand("Cancel"); okButton.addActionListener(new ButtonClickListener()); submitButton.addActionListener(new ButtonClickListener()); cancelButton.addActionListener(new ButtonClickListener()); controlPanel.add(okButton); controlPanel.add(submitButton); controlPanel.add(cancelButton); mainFrame.setVisible(true); } private class ButtonClickListener implements ActionListener{ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if( command.equals( "OK" )) { statusLabel.setText("Ok Button clicked."); } else if( command.equals( "Submit" ) ) { statusLabel.setText("Submit Button clicked."); } else { statusLabel.setText("Cancel Button clicked."); } } } }
Скомпилируйте программу, используя командную строку. Перейдите к D: /> SWING и введите следующую команду.
D:\AWT>javac com\tutorialspoint\gui\SwingControlDemo.java
Если ошибки не возникает, это означает, что компиляция прошла успешно. Запустите программу, используя следующую команду.
D:\AWT>java com.tutorialspoint.gui.SwingControlDemo
Проверьте следующий вывод.