Check out java.awt.event, it's a pretty decent event paradigm. If you download the full JDK with source you can look at how they implemented it, too.
The backbone of a message driven system is a concept called a message loop - it loops (until directed to exit by an event), polling for new events and dispatching them to a known listener. Less sophisticated applications can hard-code the dispatching of messages into a big switch statement within the message loop, larger ones (and event frameworks) should provide a mechanism for registering an instance of a listener to service specified events.