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.
A2:
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.
A3:
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.
A4:
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.