The AppEvent library provides the anonym sending and receiving of events.
The event sender doesn't know the receiver of a event, and vice versa. The only shared knowledge between sender and receiver are the type (class) of the event.

The process of binding the receiver to a sender also works via the AppEvent concept:
With posting a {@link net.sf.cuf.appevent.BindEvent} object the receiver (an object of any class) can bind one of its methods to an {@link net.sf.cuf.appevent.AppEvent} type.
There can be any number of receivers for a given event class, the all get notified in a undefined (but deterministic) order.

In most GUI applications, certain parts (e.g. the various dialogs) are connected in some hierarchical way. When this parts implement the {@link net.sf.cuf.appevent.AppEventSupport} interface, their relation can serve as an "chain of responsibility" for the AppEvent's.
At the end of such a chain is typically a {@link net.sf.cuf.appevent.AppEventManager} object, that does the dispatching of all events that were not consumed on the way through the chain.