FileDocCategorySizeDatePackage
AncestorNotifier.javaAPI DocJava SE 6 API6709Tue Jun 10 00:26:34 BST 2008javax.swing

AncestorNotifier

public class AncestorNotifier extends Object implements ComponentListener, Serializable, PropertyChangeListener
version
1.21 04/07/06
author
Dave Moore

Fields Summary
Component
firstInvisibleAncestor
EventListenerList
listenerList
JComponent
root
Constructors Summary
AncestorNotifier(JComponent root)


      
	this.root = root;
       	addListeners(root, true);
    
Methods Summary
voidaddAncestorListener(javax.swing.event.AncestorListener l)

	listenerList.add(AncestorListener.class, l);
    
voidaddListeners(java.awt.Component ancestor, boolean addToFirst)

	Component a;

	firstInvisibleAncestor = null;
	for (a = ancestor;
	     firstInvisibleAncestor == null;
	     a = a.getParent()) {
	    if (addToFirst || a != ancestor) {
		a.addComponentListener(this);

		if (a instanceof JComponent) {
		    JComponent jAncestor = (JComponent)a;

		    jAncestor.addPropertyChangeListener(this);
		}
	    }
	    if (!a.isVisible() || a.getParent() == null || a instanceof Window) {
		firstInvisibleAncestor = a;
	    }
	}
	if (firstInvisibleAncestor instanceof Window &&
	    firstInvisibleAncestor.isVisible()) {
	    firstInvisibleAncestor = null;
	}
    
public voidcomponentHidden(java.awt.event.ComponentEvent e)

	Component ancestor = e.getComponent();
	boolean needsNotify = firstInvisibleAncestor == null;

	if ( !(ancestor instanceof Window) ) {
	    removeListeners(ancestor.getParent());
	}
	firstInvisibleAncestor = ancestor;
	if (needsNotify) {
	    fireAncestorRemoved(root, AncestorEvent.ANCESTOR_REMOVED,
				(Container)ancestor, ancestor.getParent());
	}
    
public voidcomponentMoved(java.awt.event.ComponentEvent e)

	Component source = e.getComponent();

	fireAncestorMoved(root, AncestorEvent.ANCESTOR_MOVED,
			  (Container)source, source.getParent());
    
public voidcomponentResized(java.awt.event.ComponentEvent e)

public voidcomponentShown(java.awt.event.ComponentEvent e)

	Component ancestor = e.getComponent();

	if (ancestor == firstInvisibleAncestor) {
	    addListeners(ancestor, false);
	    if (firstInvisibleAncestor == null) {
		fireAncestorAdded(root, AncestorEvent.ANCESTOR_ADDED,
				  (Container)ancestor, ancestor.getParent());
	    }
	}
    
protected voidfireAncestorAdded(javax.swing.JComponent source, int id, java.awt.Container ancestor, java.awt.Container ancestorParent)
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

	// 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);
	    }	       
	}
    
protected voidfireAncestorMoved(javax.swing.JComponent source, int id, java.awt.Container ancestor, java.awt.Container ancestorParent)
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

	// 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]).ancestorMoved(ancestorEvent);
	    }	       
	}
    
protected voidfireAncestorRemoved(javax.swing.JComponent source, int id, java.awt.Container ancestor, java.awt.Container ancestorParent)
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

	// 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);
	    }	       
	}
    
javax.swing.event.AncestorListener[]getAncestorListeners()

	return (AncestorListener[])listenerList.getListeners(AncestorListener.class);
    
public voidpropertyChange(java.beans.PropertyChangeEvent evt)

	String s = evt.getPropertyName();

	if (s!=null && (s.equals("parent") || s.equals("ancestor"))) {
	    JComponent component = (JComponent)evt.getSource();

	    if (evt.getNewValue() != null) {
		if (component == firstInvisibleAncestor) {
		    addListeners(component, false);
		    if (firstInvisibleAncestor == null) {
			fireAncestorAdded(root, AncestorEvent.ANCESTOR_ADDED,
					  component, component.getParent());
		    }
		}
	    } else {
		boolean needsNotify = firstInvisibleAncestor == null;
		Container oldParent = (Container)evt.getOldValue();

		removeListeners(oldParent);
		firstInvisibleAncestor = component;
		if (needsNotify) {
		    fireAncestorRemoved(root, AncestorEvent.ANCESTOR_REMOVED,
					component, oldParent);
		}
	    }
	}
    
voidremoveAllListeners()

	removeListeners(root);
    
voidremoveAncestorListener(javax.swing.event.AncestorListener l)

	listenerList.remove(AncestorListener.class, l);
    
voidremoveListeners(java.awt.Component ancestor)

	Component a;
	for (a = ancestor; a != null; a = a.getParent()) {
	    a.removeComponentListener(this);
	    if (a instanceof JComponent) {
		JComponent jAncestor = (JComponent)a;
		jAncestor.removePropertyChangeListener(this);
	    }
	    if (a == firstInvisibleAncestor || a instanceof Window) {
		break;
	    }
	}