Как работает ActionListener?

У меня есть идея о том, как использовать слушателей действий и их реализации, но мне было интересно, может ли кто-нибудь сказать мне, как они слушают события? Есть ли какой-то механизм опроса?

3 ответов


прослушиватели действий регистрируются для событий с помощью шаблон Observer и они уведомляются основным циклом событий о любых событиях, для которых они зарегистрированы. Так что нет, это не механизм опроса (вытягивания), а наоборот - обратный вызов (push). Это пример программирования "не звоните нам, мы позвоним вам". Поскольку все в вашем коде запускается из одного потока (цикла событий) , вам не нужно беспокоиться о синхронизации между различными событиями - поэтому ваш код многопотоковое исполнение.


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


учебник объясняет, как они работают довольно хорошо: http://download.oracle.com/javase/tutorial/uiswing/events/actionlistener.html

Я думаю, что реализация пользовательского интерфейса JComponent будет запускать (вызывать) все зарегистрированные события при взаимодействии с пользователем (я думаю).

например, когда пользователь нажимает JButton, кнопка (или это ui, или какой-то другой внутренний обработчик) будет искать все зарегистрированные ActionListeners и actionPerformed(...) методы.