(i) Идея «слушателей» заключается в том, что вы хотите предоставить список компонентов, объектов, программных модулей и т. Д., Которые будут уведомлены о событии.Причина, по которой нажатие кнопки не просто вызывает что-то, заключается в том, что кто-то должен слушать это событие, чтобы реагировать на него.Любой объект, реализующий соответствующий интерфейс Listener (в зависимости от типа события), может быть добавлен и, следовательно, обработать событие.
(ii) Это обратный вызов.Вы должны сказать Слушателю: «Вот экземпляр объекта, который может обрабатывать ваши события. Пожалуйста, добавьте его в список объектов, которые будут уведомлены».В некотором смысле это похоже на подписку на канал RSS - все в списке получают обновления, когда это происходит.
(iii) Событие является отдельным объектом.Система управления окнами (которая на некотором глубоком уровне соединяется с библиотекой управления окнами базовой ОС) создает объект события и затем перемещается по списку зарегистрированных прослушивателей, уведомляя каждого из них.Есть некоторые исключения из этого (например, слушатель может воспринимать событие, не давая кому-либо из списка слышать его, но это отдельный вопрос)
(iv) Потому что getSource() возвращает экземпляр компонента.Если вы хотите иметь доступ к специфичным для Button методам (что делается в следующей строке, с setText
, вам нужно иметь дело с экземпляром Button, чтобы этот вызов метода знал, что делать (т.е. какой классна котором нужно работать).
(v) Кнопка не меняет свой заголовок - это делает ButtonHandler, поэтому, когда виджет выбирается, внутри ButtonHandler вызывается метод widgetSelected.затем проверяет источник события (который предоставляет ссылку на исходную кнопку) и затем обновляет текст кнопки, чтобы отразить, что она была нажата.