/*
* @(#)AncestorNotifier.java 1.21 06/04/07
*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package javax.swing;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.Component;
import java.awt.Container;
import java.awt.Window;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.io.Serializable;
/**
* @version 1.21 04/07/06
* @author Dave Moore
*/
class AncestorNotifier implements ComponentListener, PropertyChangeListener, Serializable
{
Component firstInvisibleAncestor;
EventListenerList listenerList = new EventListenerList();
JComponent root;
AncestorNotifier(JComponent root) {
this.root = root;
addListeners(root, true);
}
void addAncestorListener(AncestorListener l) {
listenerList.add(AncestorListener.class, l);
}
void removeAncestorListener(AncestorListener l) {
listenerList.remove(AncestorListener.class, l);
}
AncestorListener[] getAncestorListeners() {
return (AncestorListener[])listenerList.getListeners(AncestorListener.class);
}
/**
* 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.
* @see EventListenerList
*/
protected void fireAncestorAdded(JComponent source, int id, Container ancestor, Container ancestorParent) {
// 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]==AncestorListener.class) {
// Lazily create the event:
AncestorEvent ancestorEvent =
new AncestorEvent(source, id, ancestor, ancestorParent);
((AncestorListener)listeners[i+1]).ancestorAdded(ancestorEvent);
}
}
}
/**
* 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.
* @see EventListenerList
*/
protected void fireAncestorRemoved(JComponent source, int id, Container ancestor, Container ancestorParent) {
// 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]==AncestorListener.class) {
// Lazily create the event:
AncestorEvent ancestorEvent =
new AncestorEvent(source, id, ancestor, ancestorParent);
((AncestorListener)listeners[i+1]).ancestorRemoved(ancestorEvent);
}
}
}
/**
* 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.
* @see EventListenerList
*/
=1= |