ShadowPopupFactory (JGoodies Looks 2.6 API)
Date: 2015-01-03

com.jgoodies.looks.common

## Class ShadowPopupFactory

- java.lang.Object
- - javax.swing.PopupFactory
  - - com.jgoodies.looks.common.ShadowPopupFactory

-     public final class ShadowPopupFactory
      extends PopupFactory

  The JGoodies Looks implementation of `PopupFactory`. Adds a drop shadow border to all popups except ComboBox popups. It is installed by the JGoodies Plastic L&F, as well as by the JGoodies Windows L&F during the Look&Feel initialization, see `PlasticLookAndFeel.initialize()` and `WindowsLookAndFeel.initialize()`.

  This factory shall not be used on platforms that provide native drop shadows, such as the Mac OS X. Therefore the invocation of the `install()` method will have no effect on such platforms.

  Note: To be used in a sandbox environment, this PopupFactory requires two AWT permissions: `createRobot` and `readDisplayPixels`. The reason for it is, that in the case of the heavy weight popups this PopupFactory uses a Robot to snapshot the screen background to simulate the drop shadow effect.

  Version:
    $Revision: 1.8 $
  Author:
    Karsten Lentzsch
  See Also:
    `AWTPermission`, `Robot`, `Popup`, `LookAndFeel.initialize()`, `LookAndFeel.uninitialize()`

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `Popup` | `getPopup(Component owner, Component contents, int x, int y)` Creates a `Popup` for the Component `owner` containing the Component `contents`.
    `static void` | `install()` Installs the ShadowPopupFactory as the shared popup factory on non-Mac platforms.
    `static void` | `uninstall()` Uninstalls the ShadowPopupFactory and restores the original popup factory as the new shared popup factory.

    - ### Methods inherited from class javax.swing.PopupFactory

      `getSharedInstance, setSharedInstance`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### install

          public static void install()

      Installs the ShadowPopupFactory as the shared popup factory on non-Mac platforms. Also stores the previously set factory, so that it can be restored in `#uninstall`.

      In some Mac Java environments the popup factory throws a NullPointerException when we call `#getPopup`.

      TODO: The Mac case shows that we may have problems replacing non PopupFactory instances. Therefore we should consider replacing only instances of PopupFactory.

      See Also:
        `uninstall()`

    - #### uninstall

          public static void uninstall()

      Uninstalls the ShadowPopupFactory and restores the original popup factory as the new shared popup factory.
      See Also:
        `install()`

    - #### getPopup

          public Popup getPopup(Component owner,
                       Component contents,
                       int x,
                       int y)

      Creates a `Popup` for the Component `owner` containing the Component `contents`. In addition to the superclass behavior, we try to return a Popup that has a drop shadow, if popup drop shadows are active - as returned by `Options#isPopupDropShadowActive`.

      `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 paramaters, the `Popup` may not display at `x` and `y`.

      We invoke the super `#getPopup`, not the one in the stored factory, because the popup type is set in this instance, not in the stored one.

      Overrides:
        `getPopup` in class `PopupFactory`
      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
      See Also:
        `Options.isPopupDropShadowActive()`

Copyright © 2001-2014 JGoodies Software GmbH. All Rights Reserved.