/* * A Java program that generates a custom event. * Based on the javax.swing.event.EventListener documentation. * * Ben Bederson, February 20, 2002 */ import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.event.*; class AlarmEvent extends AWTEvent { static public int ALARM_RANG = 1; private int nrings = 0; public AlarmEvent(Object source, int id, int nrings) { super(source, id); this.nrings = nrings; } public int getNumRings() { return nrings; } } interface AlarmListener extends EventListener { public void alarmRang(AlarmEvent e); } public class AlarmClock { EventListenerList listenerList = new EventListenerList(); AlarmEvent alarmEvent = null; public void addAlarmListener(AlarmListener l) { listenerList.add(AlarmListener.class, l); } public void removeAlarmListener(AlarmListener l) { listenerList.remove(AlarmListener.class, l); } // Notify all listeners that have registered interest for // notification on this event type. The event instance // is lazily created using the parameters passed into // the fire method. protected void fireAlarmRang(int nrings) { // Guaranteed to return a non-null array Object[] listeners = listenerList.getListenerList(); // Process the listeners last to first, notifying // those that are interested in this event for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==AlarmListener.class) { // Lazily create the event: if (alarmEvent == null) { alarmEvent = new AlarmEvent(this, AlarmEvent.ALARM_RANG, nrings); } ((AlarmListener)listeners[i+1]).alarmRang(alarmEvent); } } } public void forceAlarm() { fireAlarmRang(3); } static public void main(String[] args) { AlarmClock clock = new AlarmClock(); clock.addAlarmListener(new AlarmListener() { public void alarmRang(AlarmEvent e) { System.out.println("alarm! " + e.getNumRings() + " rings"); } }); clock.forceAlarm(); } }