Inner Classes As Event Handlers


KyleBrown pointed out in BeansNotObserverObservable that a shortcoming of the AWT eventing is that the interface for event listeners is fixed, as opposed to the model in SelfAddressedStampedEnvelope where you can specify the message you want to receive for a particular event.

The problem occurs when a particular class needs to listen for the same event on several different objects, like Lists in a panel. You have to check the source or command argument to see which object generated the event.

A small point, but one technique I find useful is employing anonymous inner classes as handlers and assigning them as listeners to the sources. It avoids the conditionals of multiplexing events through one method.

Here's a fragment of code which shows how it looks.

    public Test()

ActionListener okPressHandler = new ActionListener() { public void actionPerformed(ActionEvent e) { status = OK; } }; ActionListener cancelPressHandler = new ActionListener() { public void actionPerformed(ActionEvent e) { status = CANCEL; } };

Agreed. Inner classes are a nice way around the limitations of Event handlers, if your environment supports them, which sadly, VisualAge for Java doesn't :(

As an aside, I was surprised to find in the book JavaInANutshell, 2nd edition, an implementation of SelfAddressedStampedEnvelope for Event handlers in their section on reflection in Java.



View edit of December 28, 2000 or FindPage with title or text search