Popup & PopupFactory
      Certain Components, such as JPopupMenu
      and JToolTip, present themselves
      above all other Components in a particular
      containment hierarchy. Rather than each of these
      Components containing the same code to obtain the
      same behavior, they delegate
      to a Popup which can be obtained from a
      PopupFactory. A Popup is able to
      display a Component at a particular location on the 
      screen. Based on the size and location of the requested
      Component, PopupFactory returns an 
      appropriate Popup.
    
      Previously, Popup and 
      PopupFactory were package private. For JDK 1.4,
      we have exposed these classes to enable
      custom look and feel implementations to create their 
      own Popups. This allows other look and feels
      to position menus
      in an appropriate manner for their look and feel.
      To this end, we have made these classes public:
public class PopupFactory {
    public static void setSharedInstance(PopupFactory factory);
    public static PopupFactory getSharedInstance();
    public Popup getPopup(Component owner, Component contents, int x, int y) throws IllegalArgumentException;
    }
    
public class Popup {
    protected Popup(Component owner, Component contents, int x, int y);
    protected Popup();
    public void show();
    public void hide();
    }
    
      To enable the Popup used by JPopupMenu 
      to be replaced by the UI, we added the following to
      
      PopupMenuUI:
    
    public Popup getPopup(JPopupMenu popup, int x, int y);
    
    
      PopupMenuUI.getPopup's implementation obtains
      the Popup from the shared
      PopupFactory, but custom look and feel
      implementations may override this and return whatever
      Popup they desire.
    
      JPopupMenu previously defined the method
      setLocation. Prior to this release,
      this method would invoke
      setLocation on the Popup, but as we
      have removed this method from Popup,
      JPopupMenu now recreates the
      Popup.
    
      JPopupMenu also defined the method
      setPopupSize, which invoked
      setSize on the Popup if it was
      visible. Internally, we changed this method to set the
      preferred size of the JPopupMenu, which gives
      the same results. If the JPopupMenu is
      visible when this is invoked, the Popup will be
      recreated.  The  
      JPopupMenu
      javadoc changed to reflect the new behavior:
    
    public void setPopupSize(Dimension d);
    public void setPopupSize(int width, int height);