org.jdesktop.jxlayer.plaf.ext
Class LockableUI

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<javax.swing.JComponent>
                  extended by org.jdesktop.jxlayer.plaf.ext.LockableUI
All Implemented Interfaces:
java.beans.PropertyChangeListener, java.io.Serializable, java.util.EventListener

public class LockableUI
extends AbstractBufferedLayerUI<javax.swing.JComponent>

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 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 lockableUI = new LockableLayerUI(); 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

See Also:
Serialized Form

Constructor Summary
LockableUI()
          Creates a new instance of LockableUI
LockableUI(LayerEffect... lockedEffects)
          Creates a new instance of LockableUI, passed lockedEffects will be used for when this UI in the locked state
 
Method Summary
protected  LayerEffect[] getLayerEffects(JXLayer<? extends javax.swing.JComponent> l)
          Returns the array of LayerEffect to be used during painting of this JXLayer, the default implementation returns constant empty array.
 java.awt.Cursor getLockedCursor()
          Returns the mouse cursor to be used by this LockableLayerUI when it locked state.
 LayerEffect[] getLockedEffects()
          Returns the effects to be used when this UI is locked.
protected  LayerEffect[] getLockedEffects(JXLayer<? extends javax.swing.JComponent> l)
           
 void installUI(javax.swing.JComponent c)
          Configures the JXLayer this LayerUI is set to. The default implementation registers the LayerUI as a property change listener for the passed JXLayer

This implementation saves the passed JXLayer instance and checks that it set to one layer only

protected  boolean isIncrementalUpdate(JXLayer<? extends javax.swing.JComponent> 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.
 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.
 void paint(java.awt.Graphics g, javax.swing.JComponent c)
          Paints the specified component. Subclasses should override this method and use the specified Graphics object to render the content of the component.

Note: It is rarely necessary to override this method, for custom painting override AbstractLayerUI.paintLayer(Graphics2D,JXLayer) instead

This method configures the passed Graphics with help of the AbstractLayerUI.configureGraphics(Graphics2D,JXLayer) method, then calls paintLayer(Graphics2D,JXLayer) and resets the "dirty bit" at the end.

This method paints the paitns the JXLayer to the BufferedImage and then paints this image to the passed Graphics.

protected  void paintLayer(java.awt.Graphics2D g2, JXLayer<? extends javax.swing.JComponent> 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 setLockedEffects(LayerEffect... lockedEffects)
          Sets the effects to be used when this UI is locked.
 void uninstallUI(javax.swing.JComponent c)
          
 
Methods inherited from class org.jdesktop.jxlayer.plaf.AbstractBufferedLayerUI
applyLayerEffects, createBuffer, getBuffer, getLayer, isBufferContentValid, isBufferFormatValid, propertyChange, setBuffer, updateUI
 
Methods inherited from class org.jdesktop.jxlayer.plaf.AbstractLayerUI
configureGraphics, eventDispatched, getClip, getComposite, getLayerEventMask, getRenderingHints, getTransform, handlePropertyChangeEvent, isDirty, processFocusEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, setDirty
 
Methods inherited from class org.jdesktop.jxlayer.plaf.LayerUI
addPropertyChangeListener, addPropertyChangeListener, firePropertyChange, getPreferredScrollableViewportSize, getPropertyChangeListeners, getPropertyChangeListeners, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, removePropertyChangeListener, removePropertyChangeListener
 
Methods inherited from class javax.swing.plaf.ComponentUI
contains, createUI, getAccessibleChild, getAccessibleChildrenCount, getMaximumSize, getMinimumSize, getPreferredSize, update
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LockableUI

public LockableUI()
Creates a new instance of LockableUI


LockableUI

public LockableUI(LayerEffect... lockedEffects)
Creates a new instance of LockableUI, passed lockedEffects will be used for when this UI in the locked state

Parameters:
lockedEffects - effects to be used when this UI is locked
See Also:
setLocked(boolean), setLockedEffects(LayerEffect...)
Method Detail

installUI

public void installUI(javax.swing.JComponent c)
Configures the JXLayer this LayerUI is set to. The default implementation registers the LayerUI as a property change listener for the passed JXLayer

This implementation saves the passed JXLayer instance and checks that it set to one layer only

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

uninstallUI

public void uninstallUI(javax.swing.JComponent c)

Overrides:
uninstallUI in class AbstractBufferedLayerUI<javax.swing.JComponent>

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<? extends javax.swing.JComponent> l)
Description copied from class: AbstractBufferedLayerUI
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 BufferedImageOpEffects are used.
If this method returns true the cache image will be updated on every painting.

The default implementation returns true

Overrides:
isIncrementalUpdate in class AbstractBufferedLayerUI<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:
AbstractBufferedLayerUI.getBuffer()

paintLayer

protected void paintLayer(java.awt.Graphics2D g2,
                          JXLayer<? extends javax.swing.JComponent> 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<javax.swing.JComponent>
Parameters:
g2 - the Graphics2D context in which to paint
l - the JXLayer being painted

paint

public void paint(java.awt.Graphics g,
                  javax.swing.JComponent c)
Description copied from class: AbstractBufferedLayerUI
Paints the specified component. Subclasses should override this method and use the specified Graphics object to render the content of the component.

Note: It is rarely necessary to override this method, for custom painting override AbstractLayerUI.paintLayer(Graphics2D,JXLayer) instead

This method configures the passed Graphics with help of the AbstractLayerUI.configureGraphics(Graphics2D,JXLayer) method, then calls paintLayer(Graphics2D,JXLayer) and resets the "dirty bit" at the end.

This method paints the paitns the JXLayer to the BufferedImage and then paints this image to the passed Graphics.

It also manages the state of the existing cached image and applies the existing LayerEffects to the image.

Overrides:
paint in class AbstractBufferedLayerUI<javax.swing.JComponent>
Parameters:
g - the Graphics context in which to paint;
c - the component being painted; it can be safely cast to the JXLayer<V>
See Also:
AbstractLayerUI.paintLayer(Graphics2D,JXLayer), AbstractBufferedLayerUI.isBufferFormatValid(JXLayer), AbstractBufferedLayerUI.isBufferContentValid(JXLayer,Shape), AbstractBufferedLayerUI.getLayerEffects(JXLayer)

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

getLockedEffects

public LayerEffect[] getLockedEffects()
Returns the effects to be used when this UI is locked.

Returns:
the effects to be used when this UI is locked
See Also:
setLocked(boolean)

getLockedEffects

protected LayerEffect[] getLockedEffects(JXLayer<? extends javax.swing.JComponent> l)

setLockedEffects

public void setLockedEffects(LayerEffect... lockedEffects)
Sets the effects to be used when this UI is locked.

Parameters:
lockedEffects - the effects to be used when this UI is locked
See Also:
setLocked(boolean)

getLayerEffects

protected LayerEffect[] getLayerEffects(JXLayer<? extends javax.swing.JComponent> l)
Returns the array of LayerEffect to be used during painting of this JXLayer, the default implementation returns constant empty array.

Overrides:
getLayerEffects in class AbstractBufferedLayerUI<javax.swing.JComponent>
Parameters:
l - the JXLayer being painted
Returns:
the array of LayerEffect to be used during painting of the JXLayer