Java Code:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;

public class AncestorTest {
  public static void main(String args[]) {
    final JFrame frame = new JFrame();
    Container contentPane = frame.getContentPane();
    JButton b = new JButton("Hide for 5");
    ActionListener action = new ActionListener() {
      public void actionPerformed(ActionEvent actionEvent) {
        frame.setVisible(false);
        TimerTask task = new TimerTask() {
          public void run() {
            frame.setVisible(true);
          }
        };
        Timer timer = new Timer();
        timer.schedule(task, 5000);
      }
    };
    b.addActionListener(action);
    AncestorListener ancestor = new AncestorListener() {
      public void ancestorAdded(AncestorEvent e) {
        System.out.println("Added");
        dumpInfo(e);
      }

      public void ancestorMoved(AncestorEvent e) {
        System.out.println("Moved");
        dumpInfo(e);
      }

      public void ancestorRemoved(AncestorEvent e) {
        System.out.println("Removed");
        dumpInfo(e);
      }

      private void dumpInfo(AncestorEvent e) {
        System.out.println("\tAncestor: " + name(e.getAncestor()));
        System.out.println("\tAncestorParent: "
            + name(e.getAncestorParent()));
        System.out.println("\tComponent: " + name(e.getComponent()));
      }

      private String name(Container c) {
        return (c == null) ? null : c.getName();
      }
    };
    b.addAncestorListener(ancestor);
    contentPane.add(b, BorderLayout.NORTH);
    frame.setSize(300, 200);
    frame.show();
  }
}