org.tbee.swing
Class DropShadowPanel

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by org.tbee.swing.DropShadowPanel
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.beans.PropertyChangeListener, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible

public class DropShadowPanel
extends javax.swing.JPanel
implements java.beans.PropertyChangeListener

DropShadowPanel is a generic lightweight container casting the shadow of its children. The shadow itself is generated by a org.jdesktop.swingx.util.ImageShadowFactory you can provide or modify.

Besides the properties provided by the ImageShadowFactory, the drop shadow panel gives you control over the angle and the distance of the shadow. Any change of these properties, be the properties of the ImageShadowFactory or the angle or the distance, will triger an update of the panel to repaint it.

The default shadow factory provided by this panel is suited for good looking results with regular Swing components. You can also combine this panel with a StackLayout and a org.jdesktop.swingx.CheckboardPanel to create interesting effects.

IMPORTANT NOTICE: this component has not yet been fully tested.

Note: some components (like radio and checkbutton) must have setOpaque(false)

Author:
Romain Guy
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
DropShadowPanel()
          Creates a new checkboard panel with a flow layout.
DropShadowPanel(ImageShadowFactory factory, java.awt.LayoutManager layout)
          Creates a new checkboard panel the specified layout and shadow factory.
DropShadowPanel(java.awt.LayoutManager layout)
          Creates a new checkboard panel the specified layout.
 
Method Summary
 void doLayout()
          When this panel is asked to lay out its children components, the shadow is invalidated for redrawing.
 float getAngle()
          Gets the angle, in degrees, of the shadow relatively to the panel's content.
 int getDistance()
          Gets the distance, in pixels, of the shadow relatively to the panel's content.
 ImageShadowFactory getImageShadowFactory()
          Gets the shadow factory used to generate the shadow.
 boolean isOpaque()
          Due to the nature of this panel, it is assumed it is non opaque.
 void paint(java.awt.Graphics g)
          When the drop shadow is invalidated (see doLayout()), the content of this panel is drawn in an offscreen picture and the shadow factory is asked to generate the shadow.
 void propertyChange(java.beans.PropertyChangeEvent evt)
          Whenever a property of the shadow factory is changed, the shadow is invalidated and the panel is updated for repainting.
 void setAngle(float angle)
          Sets the angle, in degrees, at which the drop shadow is drawn relatively to this panel's content.
 void setDistance(int distance)
          Sets the distance, in pixels, at which the drop shadow is drawn relatively to this panel's content.
 void setImageShadowFactory(ImageShadowFactory factory)
          Sets the shadow factory used by this panel to generate the shadows.
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

DropShadowPanel

public DropShadowPanel()

Creates a new checkboard panel with a flow layout. The drop shadow has the following default properties:

This configuration provides good looking results for use with Swing components. To add a drop shadow to a picture, the distance should be increased.


DropShadowPanel

public DropShadowPanel(java.awt.LayoutManager layout)

Creates a new checkboard panel the specified layout. The drop shadow has the following default properties:

This configuration provides good looking results for use with Swing components. To add a drop shadow to a picture, the distance should be increased.


DropShadowPanel

public DropShadowPanel(ImageShadowFactory factory,
                       java.awt.LayoutManager layout)

Creates a new checkboard panel the specified layout and shadow factory. The drop shadow has the following default properties:

This configuration provides good looking results for use with Swing components. To add a drop shadow to a picture, the distance should be increased.

Method Detail

getImageShadowFactory

public ImageShadowFactory getImageShadowFactory()

Gets the shadow factory used to generate the shadow.

Returns:
this panel's shadow factory

setImageShadowFactory

public void setImageShadowFactory(ImageShadowFactory factory)

Sets the shadow factory used by this panel to generate the shadows.

If the specified factory is null, the default shadow factory is used instead (see org.jdesktop.swingx.util.ImageShadowFactory#ImageShadowFactory().

Parameters:
factory - the factory used to generate the shadows for this panel's content

getAngle

public float getAngle()

Gets the angle, in degrees, of the shadow relatively to the panel's content.

Returns:
this panel's shadow angle

setAngle

public void setAngle(float angle)

Sets the angle, in degrees, at which the drop shadow is drawn relatively to this panel's content.

The angle should be comprised between 0 and 360 but negative values and values greater than 360 are accepted.

Parameters:
angle - the angle of the shadow relatively to the panel's content

getDistance

public int getDistance()

Gets the distance, in pixels, of the shadow relatively to the panel's content.

Returns:
this panel's shadow distance

setDistance

public void setDistance(int distance)

Sets the distance, in pixels, at which the drop shadow is drawn relatively to this panel's content.

The distance can be either positive or negative.

Parameters:
distance - the distance of the shadow relatively to the panel's content

isOpaque

public boolean isOpaque()

Due to the nature of this panel, it is assumed it is non opaque. This allows to handle the drop shadow drawing properly.

Overrides:
isOpaque in class javax.swing.JComponent
Returns:
always true

doLayout

public void doLayout()

When this panel is asked to lay out its children components, the shadow is invalidated for redrawing.

Overrides:
doLayout in class java.awt.Container

paint

public void paint(java.awt.Graphics g)

When the drop shadow is invalidated (see doLayout()), the content of this panel is drawn in an offscreen picture and the shadow factory is asked to generate the shadow. Otherwise, the shadow is drawn, then the panel is painted as usual.

Overrides:
paint in class javax.swing.JComponent
Parameters:
g - the Graphics context in which to paint

propertyChange

public void propertyChange(java.beans.PropertyChangeEvent evt)

Whenever a property of the shadow factory is changed, the shadow is invalidated and the panel is updated for repainting.

Specified by:
propertyChange in interface java.beans.PropertyChangeListener
Parameters:
evt - the property change event generating the update


Copyright © 2010. All Rights Reserved.