Как работает ActionListener?
У меня есть идея о том, как использовать слушателей действий и их реализации, но мне было интересно, может ли кто-нибудь сказать мне, как они слушают события? Есть ли какой-то механизм опроса?
3 ответов
прослушиватели действий регистрируются для событий с помощью шаблон Observer и они уведомляются основным циклом событий о любых событиях, для которых они зарегистрированы. Так что нет, это не механизм опроса (вытягивания), а наоборот - обратный вызов (push). Это пример программирования "не звоните нам, мы позвоним вам". Поскольку все в вашем коде запускается из одного потока (цикла событий) , вам не нужно беспокоиться о синхронизации между различными событиями - поэтому ваш код многопотоковое исполнение.
существует цикл событий, который реализуется в ядро AWT. Он получает все события и отправляет их соответствующим слушателям.
учебник объясняет, как они работают довольно хорошо: http://download.oracle.com/javase/tutorial/uiswing/events/actionlistener.html
Я думаю, что реализация пользовательского интерфейса JComponent
будет запускать (вызывать) все зарегистрированные события при взаимодействии с пользователем (я думаю).
например, когда пользователь нажимает JButton
, кнопка (или это ui, или какой-то другой внутренний обработчик) будет искать все зарегистрированные ActionListeners
и actionPerformed(...)
методы.