# Class PopupFactory

java.lang.Object
javax.swing.PopupFactory

public class PopupFactory extends Object
`PopupFactory`, as the name implies, is used to obtain instances of `Popup`s. `Popup`s are used to display a `Component` above all other `Component`s in a particular containment hierarchy. The general contract is that once you have obtained a `Popup` from a `PopupFactory`, you must invoke `hide` on the `Popup`. The typical usage is:

      PopupFactory factory = PopupFactory.getSharedInstance();
      Popup popup = factory.getPopup(owner, contents, x, y);
      popup.show();
      ...
      popup.hide();

Since:
  1.4
See Also:
  - `Popup`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PopupFactory()`
  Constructs a `PopupFactory`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Popup`
  `getPopup(Component owner, Component contents, int x, int y)`
  Creates a `Popup` for the Component `owner` containing the Component `contents`.
  `protected Popup`
  `getPopup(Component owner, Component contents, int x, int y, boolean isHeavyWeightPopup)`
  Creates a `Popup` for the Component `owner` containing the Component `contents`.
  `static PopupFactory`
  `getSharedInstance()`
  Returns the shared `PopupFactory` which can be used to obtain `Popup`s.
  `static void`
  `setSharedInstance(PopupFactory factory)`
  Sets the `PopupFactory` that will be used to obtain `Popup`s.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## Constructor Details

  - ### PopupFactory

    public PopupFactory()
    Constructs a `PopupFactory`.

- ## Method Details

  - ### setSharedInstance

    public static void setSharedInstance(PopupFactory factory)
    Sets the `PopupFactory` that will be used to obtain `Popup`s. This will throw an `IllegalArgumentException` if `factory` is null.
    Parameters:
      `factory` - Shared PopupFactory
    Throws:
      `IllegalArgumentException` - if `factory` is null
    See Also:
      - `getPopup(Component, Component, int, int)`

  - ### getSharedInstance

    public static PopupFactory getSharedInstance()
    Returns the shared `PopupFactory` which can be used to obtain `Popup`s.
    Returns:
      Shared PopupFactory

  - ### getPopup

    public Popup getPopup(Component owner, Component contents, int x, int y) throws IllegalArgumentException
    Creates a `Popup` for the Component `owner` containing the Component `contents`. `owner` is used to determine which `Window` the new `Popup` will parent the `Component` the `Popup` creates to. A null `owner` implies there is no valid parent. `x` and `y` specify the preferred initial location to place the `Popup` at. Based on screen size, or other parameters, the `Popup` may not display at `x` and `y`.
    Parameters:
      `owner` - Component mouse coordinates are relative to, may be null
      `contents` - Contents of the Popup
      `x` - Initial x screen coordinate
      `y` - Initial y screen coordinate
    Returns:
      Popup containing Contents
    Throws:
      `IllegalArgumentException` - if contents is null

  - ### getPopup

    protected Popup getPopup(Component owner, Component contents, int x, int y, boolean isHeavyWeightPopup) throws IllegalArgumentException
    Creates a `Popup` for the Component `owner` containing the Component `contents`. The window containing the component `owner` will be used as the parent window. A null `owner` implies there is no valid parent. `x` and `y` specify the preferred initial location to place the `Popup` at. Based on screen size, or other parameters, the `Popup` may not display at `x` and `y`. `isHeavyWeightPopup` specifies if the `Popup` will be heavyweight. Passing `true` will force the `Popup` type to be heavyweight, otherwise `Popup` type will be selected by `Popup` factory. Lightweight `Popup` windows are more efficient than heavyweight (native peer) windows, but lightweight and heavyweight components do not mix well in a GUI. This method is intended to be used only by PopupFactory sub-classes.
    Parameters:
      `owner` - Component mouse coordinates are relative to, may be null
      `contents` - Contents of the Popup
      `x` - Initial x screen coordinate
      `y` - Initial y screen coordinate
      `isHeavyWeightPopup` - true if Popup should be heavy weight, otherwise popup type will be selected by popup factory.
    Returns:
      Popup containing Contents
    Throws:
      `IllegalArgumentException` - if contents is null