Java Code:
import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;

public class InternalFrameTest {
  public static void main(String args[]) {
    JFrame frame = new JFrame("Internal Frame Listener");
    Container contentPane = frame.getContentPane();
    JLayeredPane desktop = new JDesktopPane();
    desktop.setOpaque(false);
    desktop.add(createLayer("One"), JLayeredPane.POPUP_LAYER);
    desktop.add(createLayer("Two"), JLayeredPane.DEFAULT_LAYER);
    desktop.add(createLayer("Three"), JLayeredPane.PALETTE_LAYER);
    contentPane.add(desktop, BorderLayout.CENTER);
    frame.setSize(300, 300);
    frame.show();
  }

  static JInternalFrame createLayer(String label) {
    return new SelfInternalFrame(label);
  }

  static class SelfInternalFrame extends JInternalFrame {
    InternalFrameListener listener = new InternalFrameListener() {
      public void internalFrameActivated(InternalFrameEvent e) {
        dumpInfo("Activated", e);
      }

      public void internalFrameClosed(InternalFrameEvent e) {
        dumpInfo("Closed", e);
      }

      public void internalFrameClosing(InternalFrameEvent e) {
        dumpInfo("Closing", e);
      }

      public void internalFrameDeactivated(InternalFrameEvent e) {
        dumpInfo("Deactivated", e);
      }

      public void internalFrameDeiconified(InternalFrameEvent e) {
        dumpInfo("Deiconified", e);
      }

      public void internalFrameIconified(InternalFrameEvent e) {
        dumpInfo("Iconified", e);
      }

      public void internalFrameOpened(InternalFrameEvent e) {
        dumpInfo("Opened", e);
      }

      private void dumpInfo(String s, InternalFrameEvent e) {
        System.out.println("Source: " + e.getInternalFrame().getName()
            + " : " + s);
      }
    };

    public SelfInternalFrame(String s) {
      getContentPane().add(new JLabel(s, JLabel.CENTER),
          BorderLayout.CENTER);
      setName(s);
      addInternalFrameListener(listener);
      setBounds(50, 50, 100, 100);
      setResizable(true);
      setClosable(true);
      setMaximizable(true);
      setIconifiable(true);
      setTitle(s);
      setVisible(true);
    }
  }
}