Події і слухачі в java

Обробка будь-якої події (натискання кнопки, клацання мишею і ін.) Полягає в зв'язуванні події з методом, його обробляють. Принцип обробки подій, починаючи з Java 2, базується на моделі делегування подій. У цій моделі є блок прослуховування події (EventListener), який чекає надходження події певного типу від джерела, після чого обробляє його і повертає управління. Джерело - це об'єкт, який генерує подія, якщо змінюється його внутрішній стан, наприклад, змінився розмір, змінилося значення поля, ви клацнули миші по формі або вибір значення зі списку. Після генерації об'єкт-подія пересилається для обробки зареєстрованому в джерелі блоку прослуховування як параметр його методів - обробників подій.

Блоки прослуховування Listener є об'єктами класів, що реалізують інтерфейси прослуховування подій, визначених в пакеті java.awt.event. Відповідні методи, оголошені в використовуваних інтерфейсах, необхідно явно реалізувати при створенні власних класів прослуховування. Ці методи і є обработчиками події. Рухаючись джерелом блоку прослуховування об'єкт-подія є аргументом обробника події. Об'єкт класу - блоку прослуховування події необхідно зареєструвати в джерелі методом

істочнік.add СобитіеListener (об'ект_прослушіватель);

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

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

Коли подія відбувається, всі зареєстровані блоки прослуховування повідомляються і приймають копію об'єкта події. Таким чином джерело викликає метод-обробник події, визначений у класі, що є блоком прослуховування, і передає методу об'єкт події в якості параметра. Як блоків прослуховування на практиці використовуються внутрішні класи. В цьому випадку в методі, що реєструє блок прослуховування в якості параметра, використовується об'єкт цього внутрішнього класу.

Кожен інтерфейс, що включається в блок прослуховування, успадковується від інтерфейсу EventListener і призначений для обробки певного типу подій. При цьому він містить один або кілька методів, які завжди беруть об'єкт події в якості єдиного параметра і викликаються в певних ситуаціях. У таблиці наведено деякі інтерфейси і їхні методи, які повинні бути реалізовані в класі прослуховування подій, що реалізує відповідний інтерфейс:

Подія, яка генерується в разі виникнення певної ситуації і потім передається зареєстрованому блоку прослуховування для обробки, - це об'єкт класу подій. У корені ієрархії класів подій знаходиться суперклассEventObject з пакета java.util. Цей клас містить два методи: getSource (). повертає джерело подій, і toString (). повертає рядковий еквівалент події. Абстрактний клас AWTEvent з пакета java.awt є суперкласом всіх AWT-подій, пов'язаних з компонентами. Метод getID () визначає тип події, що виникає внаслідок дій користувача в візуальному додатку. Нижче наведені деякі з класів подій, похідних від AWTEvent. і розташовані в пакеті java.awt.event:

ActionEvent - генерується: при натисканні кнопки; Подвійне клацання клавішею миші по елементах списку; при виборі пункту меню;

AdjustmentEvent - генерується при зміні смуги прокрутки;

ComponentEvent - генерується, якщо компонент прихований, переміщений, змінений в розмірі або стає видимим;

FocusEvent - генерується, якщо компонент отримує або втрачає фокус введення;

TextEvent - генерується при зміні текстового поля;

ItemEvent - генерується при виборі елемента зі списку.

Клас InputEvent є абстрактним суперкласом подій введення (для клавіатури або миші). Події введення з клавіатури обробляє клас KeyEvent. події миші - MouseEvent.

Щоб реалізувати методи-обробники подій, пов'язаних з клавіатурою, необхідно визначити три методи, оголошені в інтерфейсі KeyListener. При натисканні клавіші генерується подія зі значенням KEY_PRESSED. Це призводить до запиту обробника подій keyPressed (). Коли клавіша відпускається, генерується подія зі значенням KEY_RELEASED і виконується оброблювач keyReleased (). Якщо натисканням клавіші згенерований символ, то надсилає повідомлення про подію зі значенням KEY_TYPED і викликається обробник keyTyped ().

Схожі статті