Class ShadowPopupFactory


  • public final class ShadowPopupFactory
    extends javax.swing.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 during the Look&Feel initialization, see PlasticLookAndFeel.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 $
    See Also:
    AWTPermission, Robot, Popup, LookAndFeel.initialize(), LookAndFeel.uninitialize()
    • Field Summary

      Fields 
      Modifier and Type Field Description
      (package private) static java.lang.String PROP_HORIZONTAL_BACKGROUND
      In the case of heavy weight popups, snapshots of the screen background will be stored as client properties of the popup contents' parent.
      (package private) static java.lang.String PROP_VERTICAL_BACKGROUND  
      private javax.swing.PopupFactory storedFactory
      The PopupFactory used before this PopupFactory has been installed in #install.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private ShadowPopupFactory​(javax.swing.PopupFactory storedFactory)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      javax.swing.Popup getPopup​(java.awt.Component owner, java.awt.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

        getPopup, getSharedInstance, setSharedInstance
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • PROP_HORIZONTAL_BACKGROUND

        static final java.lang.String PROP_HORIZONTAL_BACKGROUND
        In the case of heavy weight popups, snapshots of the screen background will be stored as client properties of the popup contents' parent. These snapshots will be used by the popup border to simulate the drop shadow effect. The two following constants define the names of these client properties.
        See Also:
        ShadowPopupBorder, Constant Field Values
      • PROP_VERTICAL_BACKGROUND

        static final java.lang.String PROP_VERTICAL_BACKGROUND
        See Also:
        Constant Field Values
      • storedFactory

        private final javax.swing.PopupFactory storedFactory
        The PopupFactory used before this PopupFactory has been installed in #install. Used to restored the original state in #uninstall.
    • Constructor Detail

      • ShadowPopupFactory

        private ShadowPopupFactory​(javax.swing.PopupFactory storedFactory)
    • 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 javax.swing.Popup getPopup​(java.awt.Component owner,
                                          java.awt.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 javax.swing.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:
        java.lang.IllegalArgumentException - if contents is null
        See Also:
        Options.isPopupDropShadowActive()