Representing events as objects allows for a more sophisticated interaction between the object that generated the event and the event listener. Many methods can be used to query the details of the event.
Declaring an object to be listener registers the fact that it wants to be notified with the event-generating object. This is more efficient than the polling-type approach used in JDK 1.01.
A semantic event is a high-level event like a button click or a list selection. A low-level event is like a mouse movement.
Adapter classes are special classes in the JDK that implement an interface for you and provide a dummy version of every required method. You can extend this class and override only the methods that you really want to use.