Ordinarily I would use anonymous inner classes for the event listeners. For
SCJD I just used seperate classes as this seems so much easier for a junior programmer to understand.
Not sure why your event listeners need to be public though? All mine are private classes in the class where they are used. The variables required by these inner classes are setup as instance variables in the main class for use by the inner classes as you suggested