Типичным решением в приложениях Swing является ведение списка прослушивателей событий в классе, из которого происходит событие. Когда событие происходит, вы перебираете список и уведомляете каждого слушателя события. Так что это может быть что-то вроде этого (я опущу модификаторы доступа и некоторые объявления типов для краткости):
class SomeClassInWhichTheEventOccurs {
List<MyListener> listeners;
void addListener(listener) { listeners.add(listener); }
void removeListener(listener) { listeners.remove(listener); }
void fireEvent(someEventParameters) {
foreach (listener in listeners) listener.eventOccured();
}
void someMethodInWhichTheEventOccurs() {
...
fireEvent(someEventParameters);
}
}
Параметры события могут быть любыми: вы можете создать свой собственный класс события, повторно использовать java.awt.Event или передать некоторые параметры произвольных типов.