This document discusses event-driven programming in Java. It begins with an overview of procedural versus event-driven programming. Key topics covered include events, event classes, listener interfaces, and how to write listener classes to handle different types of events like action events, mouse events, and keyboard events. Examples are provided to demonstrate handling simple actions events, window events, and using inner classes and anonymous inner classes for listeners. The document also discusses using the timer class to control animations and provides examples like moving a message with mouse drag and a keyboard event demo.