org.jdesktop.jxlayer.plaf.ext
Class LockableLayerUI<V extends javax.swing.JComponent>

java.lang.Object
  extended by javax.swing.plaf.ComponentUI
      extended by org.jdesktop.jxlayer.plaf.LayerUI<V>
          extended by org.jdesktop.jxlayer.plaf.AbstractLayerUI<V>
              extended by org.jdesktop.jxlayer.plaf.AbstractBufferedLayerUI<V>
                  extended by org.jdesktop.jxlayer.plaf.BufferedLayerUI<V>
                      extended by org.jdesktop.jxlayer.plaf.ext.LockableLayerUI<V>
All Implemented Interfaces:
java.beans.PropertyChangeListener, java.util.EventListener, LayerItem, LayerItemListener

public class LockableLayerUI<V extends javax.swing.JComponent>
extends BufferedLayerUI<V>

An implementation of the BufferedLayerUI which provides a lightweight disabling for the content of its JXLayer. This allows temporarily blocking a part of the interface with all it subcomponents, it is also useful when some kind of action is in progress, e.g. reading data from a database.

When true is passed to the setLocked(boolean), the JXLayer of this LockableLayerUI becomes "locked". It sets the "wait" mouse cursor and stops reacting on mouse, keyboard and focus events.

If setLocked(boolean) is called with false parameter after that, the JXLayer, together with all its subcomponents, gets back to live.

Subclasses usually override paintLayer(Graphics2D, JXLayer) or BufferedLayerUI.getLayerEffects(JXLayer) to implement some visual effects when JXLayer is in locked state.

Here is an example of using LockableLayerUI:

 JComponent myComponent = getMyComponent(); // just any component

 LockableLayerUI<JComponent> lockableUI = new LockableLayerUI<JComponent>();
 JXLayer<JComponent> layer = new JXLayer<JComponent>(myComponent, lockableUI);

 // locking the layer, use lockableUI.setLocked(false) to unlock
 lockableUI.setLocked(true);

 // add the layer to a frame or a panel, like any other component
 frame.add(layer);
 
The LockableDemo is available


Constructor Summary
LockableLayerUI()
           
 
Method Summary
 java.awt.Cursor getLockedCursor()
          Returns the mouse cursor to be used by this LockableLayerUI when it locked state.
 void installUI(javax.swing.JComponent c)
          Configures the specified JXLayer appropriate for this AbstractLayerUI.

This method is invoked when the LayerUI instance is being installed as the UI delegate on the specified JXLayer. Subclasses can install any listeners to the passed JXLayer, configure its glassPane or do any other setting up. The default implementation registers the passed JXLayer as a LayerItemListener for this AbstractLayerUI.

Note: Subclasses can safely cast the passed component to the JXLayer<V>

This implementation saves the passed JXLayer instance and adds itself to it as the PropertyChangeListener

protected  boolean isIncrementalUpdate(JXLayer<V> l)
          If this method returns false and AbstractLayerUI.isDirty returns false and the cached image exists and matches the size of painted JXLayer then the existing image will be used during the painting.

This implementation returns the incremental update flag set using BufferedLayerUI.setIncrementalUpdate(boolean)

If a BufferedLayerUI provides more extensive API to support incremental updated depending on its state or on the state of the passed JXLayer, this method should be overridden.

 boolean isLocked()
          Returns true if this LockableLayerUI is in locked state and all JXLayer's mouse, keyboard and focuse events are temporarily blocked, otherwise returns false.
protected  void paintLayer(java.awt.Graphics2D g2, JXLayer<V> l)
          Subclasses should implement this method and perform custom painting operations here.
 void setLocked(boolean isLocked)
          If isLocked is true then all mouse, keyboard and focuse events from the JXLayer of this LockableLayerUI will be temporarily blocked.
 void setLockedCursor(java.awt.Cursor lockedCursor)
          Sets the mouse cursor to be used by this LockableLayerUI when it locked state.
 void uninstallUI(javax.swing.JComponent c)
          Reverses configuration which was done on the specified component during installUI(JComponent). This method is invoked when this LayerUI instance is being removed as the UI delegate for the specified JXLayer.

uninstallUI(JComponent) should undo the configuration performed in installUI(JComponent), being careful to leave the JXLayer instance in a clean state (e.g. all previously set listeners must be removed in this method). The default implementation removes the passed JXLayer from the LayerItemListener's list of this AbstractLayerUI.

Note: Subclasses can safely cast the passed component to the JXLayer<V>

This method removes itself from the JXLayer's PropertyChangeListener's list and nullify the previously saved JXLayer value.

 void updateUI(JXLayer<V> l)
          Invoked when JXLayer.updateUI() is called from the JXLayer this LayerUI is set to.
 
Methods inherited from class org.jdesktop.jxlayer.plaf.BufferedLayerUI
getAlpha, getClip, getClip, getComposite, getComposite, getLayer, getLayerEffects, getLayerEffects, getRenderingHints, getRenderingHints, getTransform, getTransform, isIncrementalUpdate, layerItemChanged, propertyChange, setAlpha, setClip, setComposite, setIncrementalUpdate, setLayerEffects, setRenderingHints, setTransform
 
Methods inherited from class org.jdesktop.jxlayer.plaf.AbstractBufferedLayerUI
applyLayerEffects, createBuffer, getBuffer, isBufferContentValid, isBufferFormatValid, paint, setBuffer
 
Methods inherited from class org.jdesktop.jxlayer.plaf.AbstractLayerUI
addLayerItemListener, configureGraphics, eventDispatched, fireLayerItemChanged, fireLayerItemChanged, getLayerItemListeners, isDirty, isEnabled, processFocusEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeLayerItemListener, setDirty, setEnabled
 
Methods inherited from class org.jdesktop.jxlayer.plaf.LayerUI
getAccessibleChild, getAccessibleChildrenCount, getMaximumSize, getMinimumSize, getPreferredSize, update
 
Methods inherited from class javax.swing.plaf.ComponentUI
contains, createUI
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LockableLayerUI

public LockableLayerUI()
Method Detail

installUI

public void installUI(javax.swing.JComponent c)
Configures the specified JXLayer appropriate for this AbstractLayerUI.

This method is invoked when the LayerUI instance is being installed as the UI delegate on the specified JXLayer. Subclasses can install any listeners to the passed JXLayer, configure its glassPane or do any other setting up. The default implementation registers the passed JXLayer as a LayerItemListener for this AbstractLayerUI.

Note: Subclasses can safely cast the passed component to the JXLayer<V>

This implementation saves the passed JXLayer instance and adds itself to it as the PropertyChangeListener

Overrides:
installUI in class BufferedLayerUI<V extends javax.swing.JComponent>
Parameters:
c - the JXLayer where this UI delegate is being installed
See Also:
BufferedLayerUI.uninstallUI(JComponent), BufferedLayerUI.getLayer()

uninstallUI

public void uninstallUI(javax.swing.JComponent c)
Reverses configuration which was done on the specified component during installUI(JComponent). This method is invoked when this LayerUI instance is being removed as the UI delegate for the specified JXLayer.

uninstallUI(JComponent) should undo the configuration performed in installUI(JComponent), being careful to leave the JXLayer instance in a clean state (e.g. all previously set listeners must be removed in this method). The default implementation removes the passed JXLayer from the LayerItemListener's list of this AbstractLayerUI.

Note: Subclasses can safely cast the passed component to the JXLayer<V>

This method removes itself from the JXLayer's PropertyChangeListener's list and nullify the previously saved JXLayer value.

Overrides:
uninstallUI in class BufferedLayerUI<V extends javax.swing.JComponent>
Parameters:
c - the JXLayer where this UI delegate is being installed
See Also:
BufferedLayerUI.installUI(JComponent), BufferedLayerUI.getLayer()

isLocked

public boolean isLocked()
Returns true if this LockableLayerUI is in locked state and all JXLayer's mouse, keyboard and focuse events are temporarily blocked, otherwise returns false.

Returns:
true if this LockableLayerUI is in locked state and all JXLayer's mouse, keyboard and focuse events are temporarily blocked, otherwise returns false

setLocked

public void setLocked(boolean isLocked)
If isLocked is true then all mouse, keyboard and focuse events from the JXLayer of this LockableLayerUI will be temporarily blocked.

Parameters:
isLocked - if true then all mouse, keyboard and focuse events from the JXLayer of this LockableLayerUI will be temporarily blocked

isIncrementalUpdate

protected boolean isIncrementalUpdate(JXLayer<V> l)
Description copied from class: BufferedLayerUI
If this method returns false and AbstractLayerUI.isDirty returns false and the cached image exists and matches the size of painted JXLayer then the existing image will be used during the painting.

It helps to skip unnecessary painting and save a lot of time, especially if ImageOpEffects are used.
If this method returns true the cache image will be updated on every painting.

The default implementation returns false

Note: if you need AbstractBufferedLayerUI to update its cache on every painting, override #isIncrementalUpdate(JXLayer) to return true

This implementation returns the incremental update flag set using BufferedLayerUI.setIncrementalUpdate(boolean)

If a BufferedLayerUI provides more extensive API to support incremental updated depending on its state or on the state of the passed JXLayer, this method should be overridden.

Overrides:
isIncrementalUpdate in class BufferedLayerUI<V extends javax.swing.JComponent>
Parameters:
l - the JXLayer being painted
Returns:
true if the cache image should be updated on every painting, otherwise returns false
See Also:
BufferedLayerUI.setIncrementalUpdate(boolean), BufferedLayerUI.isIncrementalUpdate()

paintLayer

protected void paintLayer(java.awt.Graphics2D g2,
                          JXLayer<V> l)
Description copied from class: AbstractLayerUI
Subclasses should implement this method and perform custom painting operations here.

The default implementation paints the passed JXLayer as is.

Overrides:
paintLayer in class AbstractLayerUI<V extends javax.swing.JComponent>
Parameters:
g2 - the Graphics2D context in which to paint
l - the JXLayer being painted

updateUI

public void updateUI(JXLayer<V> l)
Description copied from class: LayerUI
Invoked when JXLayer.updateUI() is called from the JXLayer this LayerUI is set to.

Overrides:
updateUI in class LayerUI<V extends javax.swing.JComponent>
Parameters:
l - the JXLayer which UI is updated

getLockedCursor

public java.awt.Cursor getLockedCursor()
Returns the mouse cursor to be used by this LockableLayerUI when it locked state.

Returns:
the mouse cursor to be used by this LockableLayerUI when it locked state
See Also:
getLockedCursor(), setLocked(boolean)

setLockedCursor

public void setLockedCursor(java.awt.Cursor lockedCursor)
Sets the mouse cursor to be used by this LockableLayerUI when it locked state.

Parameters:
lockedCursor - the mouse cursor to be used by this LockableLayerUI when it locked state