有关Frame的AddNotify()的问题

源码如下,是一个JMF软件的一个类的源代码:
package jmapps.ui;

import java.util.*;
import java.awt.*;
import java.awt.event.*;

public class JMFrame extends Frame implements WindowListener {

protected Frame         frameOwner = null;
private boolean         boolFirstTimeVisible = true;
private Vector          vectorChildFrames = new Vector ();


public JMFrame () {
    this ( null, "JMFrame" );
}

public JMFrame ( String strTitle ) {
    this ( null, strTitle );
}

public JMFrame ( Frame frameOwner ) {
    this ( frameOwner, "JMFrame" );
}

public JMFrame ( Frame frameOwner, String strTitle ) {
    super ( strTitle );
    this.frameOwner = frameOwner;
    initFrame ();
}


protected void initFrame () {
    this.addWindowListener ( this );
}

public void addNotify () {
    super.addNotify ();
    autoPosition ();
}

public void setVisible ( boolean boolVisible ) {
    if ( boolVisible == true  &&  !this.isVisible()  &&  boolFirstTimeVisible == true ) {
        boolFirstTimeVisible = false;
        autoPosition ();
        if ( frameOwner != null  &&  frameOwner instanceof JMFrame ) {
            ((JMFrame)frameOwner).vectorChildFrames.addElement ( this );
        }
    }
    super.setVisible ( boolVisible );
}

public void autoPosition () {
    autoPosition ( this, frameOwner );
}

public static void autoPosition ( Frame frame, Frame frameOwner ) {
    Dimension       dim;
    Dimension       dimOwner;
    Dimension       dimFrame;
    Dimension       dimScreen;
    Point           point;
    Insets          insets;
    Frame           framePrevSibling = null;

    if ( frame == null  ||  frameOwner == null  ||  !frameOwner.isShowing() )
        return;

    if ( frameOwner instanceof JMFrame  &&  ((JMFrame)frameOwner).vectorChildFrames.size() > 0 ) {
        framePrevSibling = (Frame) ((JMFrame)frameOwner).vectorChildFrames.lastElement();
    }

    if ( framePrevSibling != null  &&  framePrevSibling.isShowing() ) {
        point = framePrevSibling.getLocationOnScreen();
        point.x += 20;
        point.y += 20;
    }
    else {
        point = frameOwner.getLocationOnScreen ();
        dimOwner = frameOwner.getSize ();
        point.y += dimOwner.height;
    }

    dim = frame.getPreferredSize ();
    dimFrame = frame.getSize ();
    dimFrame.width = Math.max ( dim.width, dimFrame.width );
    dimFrame.height = Math.max ( dim.height, dimFrame.height );
    dimScreen = Toolkit.getDefaultToolkit().getScreenSize();

    if ( point.x + dimFrame.width > dimScreen.width )
        point.x = dimScreen.width - dimFrame.width;
    if ( point.y + dimFrame.height > dimScreen.height )
        point.y = dimScreen.height - dimFrame.height;
    frame.setLocation ( point );
}

public void windowOpened ( WindowEvent event ) {
}

public void windowClosing ( WindowEvent event ) {
    this.dispose ();
}

public void windowClosed ( WindowEvent event ) {
    if ( frameOwner != null  &&  frameOwner instanceof JMFrame
                &&  ((JMFrame)frameOwner).vectorChildFrames.contains(this) ) {
        ((JMFrame)frameOwner).vectorChildFrames.removeElement ( this );
    }
}

public void windowIconified ( WindowEvent event ) {
}

public void windowDeiconified ( WindowEvent event ) {
}

public void windowActivated ( WindowEvent event ) {
}

public void windowDeactivated ( WindowEvent event ) {
}

}

这个Addnotify()方法有什么用?跟setVisible()有什么区别?看文档上说是通过将此 Frame 连接到本机屏幕资源,从而使其成为可显示的。如果 frame 是可显示的,则其所有子级也将成为可显示的。此方法由工具包内部调用,不应直接由程序调用。
什么叫做由工具包内部调用,不应直接由程序调用。能不能给个示例做解释