The JavaWorld experts answer your most pressing Java questions -- every week Q: What’s the difference between the handleEvent() and action() methods in the AWT 1.0 event model? A: All the events that a component may receive are first sent to the component’s handleEvent() method. The default implementation of handleEvent() delegates the handling to more event-specific handlers. In the case of action events, it delegates to the component’s action() method. Generally, you would override action() in a component subclass and handle the action event there. That’s the brief answer; now let’s look at a more complete description of the AWT 1.0 event model. The AWT 1.0 event model follows a ripple metaphor. Suppose someone clicks on a Button. The Button‘s Peer receives notification from the operating system (Solaris, Windows, and so on) and calls the Button‘s deliverEvent(), which calls the Button‘s postEvent(), which calls handleEvent(), which in turn calls action(). Now, in the case of a simple Button, its action() just returns false after doing nothing. But you could subclass Button with YourButton, and override action() to do something. Whether you return true (completely handled) or false (not yet completely handled) depends on whether or not other, enclosing, components are supposed to act on the event. If the Button‘s action() returns true, then its handleEvent() will also return true and its postEvent() will not ripple the event further. But if the Button‘s action() returns false, then its handleEvent() will also return false and its postEvent() will now ripple the event to its parent, which is the component containing the Button (a Canvas or a Panel, for example). The same sequence of events occurs in the parent component, and if the event is not completely handled by the parent, it is passed to the parent’s enclosing component, and so on, until it is completely handled (some component’s action() returns true) or until it reaches the topmost window. Now, handleEvent(java.awt.event.Event evt) is basically a large switch/case statement — it calls the appropriate handler based on the type of the event evt. For evt == java.awt.event.Event.ACTION_EVENT, handleEvent(evt) returns the value returned by calling action(evt, evt.arg). For evt == java.awt.event.Event.KEY_PRESS, handleEvent(evt) returns the value returned by calling keyDown (evt, evt.key). Note that only one handler is called for any given event type. So, to answer your question, in the Java 1.0 AWT event model, the default behavior is: For every evt that reaches a component, the component’s handleEvent(evt) dispatches evt to one of the component’s default handlers. In the case of java.awt.event.Event.ACTION_EVENTs, the handler is action(evt, evt.arg). Java