Event-Driven Programming
There is a listener interface defined for each event type
Each listener interface contains the abstract methods required to respond to specific events
A listener class implements a particular listener interface
Listeners are "added" to a particular GUI component
When a component generates an event, the method corresponding to that event is executed in the listener