Events allow Java GUI components to notify code of user interactions. Components generate events and event handlers register to receive them. When an event occurs, it is passed to all registered handlers. Event handlers decipher the event and process the user's interaction. Adapter classes provide default implementations of event handling methods so handlers only need to override needed methods, simplifying event handling code.