Class CompoundPainter<T>
- java.lang.Object
-
- org.jdesktop.beans.AbstractBean
-
- org.jdesktop.swingx.painter.AbstractPainter<T>
-
- org.jdesktop.swingx.painter.CompoundPainter<T>
-
- All Implemented Interfaces:
Painter<T>
- Direct Known Subclasses:
AlphaPainter
,URLPainter
public class CompoundPainter<T> extends AbstractPainter<T>
A
Painter
implemention composed of an array ofPainter
s.CompoundPainter
provides a means for combining several individualPainter
s, or groups of them, into one logical unit. Each of thePainter
s are executed in order. BufferedImageOp filter effects can be applied to them together as a whole. The entire set of painting operations may be cached together.For example, if I want to create a CompoundPainter that started with a blue background, had pinstripes on it running at a 45 degree angle, and those pinstripes appeared to "fade in" from left to right, I would write the following:
Color blue = new Color(0x417DDD); Color translucent = new Color(blue.getRed(), blue.getGreen(), blue.getBlue(), 0); panel.setBackground(blue); panel.setForeground(Color.LIGHT_GRAY); GradientPaint blueToTranslucent = new GradientPaint( new Point2D.Double(.4, 0), blue, new Point2D.Double(1, 0), translucent); MattePainter veil = new MattePainter(blueToTranslucent); veil.setPaintStretched(true); Painter pinstripes = new PinstripePainter(45); Painter backgroundPainter = new RectanglePainter(this.getBackground(), null); Painter p = new CompoundPainter(backgroundPainter, pinstripes, veil); panel.setBackgroundPainter(p);
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.jdesktop.swingx.painter.AbstractPainter
AbstractPainter.Interpolation
-
-
Constructor Summary
Constructors Constructor Description CompoundPainter()
Creates a new instance of CompoundPainterCompoundPainter(Painter... painters)
Convenience constructor for creating a CompoundPainter for an array of painters.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clearCache()
Clears the cache of thisPainter
, and all childPainters
.void
clearLocalCache()
Clears the cache of this painter only, and not of any of the children.protected void
configureGraphics(java.awt.Graphics2D g)
This method is called by thepaint
method prior to any drawing operations to configure the drawing surface.protected void
doPaint(java.awt.Graphics2D g, T component, int width, int height)
Subclasses must implement this method and perform custom painting operations here.Painter[]
getPainters()
Gets the array of painters used by this CompoundPainterjava.awt.geom.AffineTransform
getTransform()
Gets the current transform applied to all painters in this CompoundPainter.boolean
isCheckingDirtyChildPainters()
Used byisDirty()
to check if the childPainter
s should be checked for theirdirty
flag as part of processing.
Default value is:true
This should be set to false if the cacheable state of the childPainter
s are different from each other.boolean
isClipPreserved()
Indicates if the clip produced by any painter is left set once it finishes painting.protected boolean
isDirty()
ThisCompoundPainter
is dirty if it, or (optionally) any of its children, are dirty.void
setCheckingDirtyChildPainters(boolean b)
Set the flag used byisDirty()
to check if the childPainter
s should be checked for theirdirty
flag as part of processing.void
setClipPreserved(boolean shouldRestoreState)
Sets if the clip should be preserved.void
setPainters(Painter... painters)
Sets the array of Painters to use.void
setTransform(java.awt.geom.AffineTransform transform)
Set a transform to be applied to all painters contained in this CompoundPainterprotected boolean
shouldUseCache()
Returns true if the painter should use caching.protected void
validate(T object)
Iterates over all childPainter
s and gives them a chance to validate themselves.-
Methods inherited from class org.jdesktop.swingx.painter.AbstractPainter
getFilters, getInterpolation, isAntialiasing, isCacheable, isVisible, paint, setAntialiasing, setCacheable, setDirty, setFilters, setInterpolation, setVisible
-
Methods inherited from class org.jdesktop.beans.AbstractBean
addPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, addVetoableChangeListener, clone, fireIndexedPropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, fireVetoableChange, getPropertyChangeListeners, getPropertyChangeListeners, getVetoableChangeListeners, getVetoableChangeListeners, hasPropertyChangeListeners, hasVetoableChangeListeners, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, removeVetoableChangeListener
-
-
-
-
Constructor Detail
-
CompoundPainter
public CompoundPainter()
Creates a new instance of CompoundPainter
-
CompoundPainter
public CompoundPainter(Painter... painters)
Convenience constructor for creating a CompoundPainter for an array of painters. A defensive copy of the given array is made, so that future modification to the array does not result in changes to the CompoundPainter.- Parameters:
painters
- array of painters, which will be painted in order
-
-
Method Detail
-
setPainters
public void setPainters(Painter... painters)
Sets the array of Painters to use. These painters will be executed in order. A null value will be treated as an empty array.- Parameters:
painters
- array of painters, which will be painted in order
-
getPainters
public final Painter[] getPainters()
Gets the array of painters used by this CompoundPainter- Returns:
- a defensive copy of the painters used by this CompoundPainter. This will never be null.
-
isClipPreserved
public boolean isClipPreserved()
Indicates if the clip produced by any painter is left set once it finishes painting. Normally the clip will be reset between each painter. Setting clipPreserved to true can be used to let one painter mask other painters that come after it.- Returns:
- if the clip should be preserved
- See Also:
setClipPreserved(boolean)
-
setClipPreserved
public void setClipPreserved(boolean shouldRestoreState)
Sets if the clip should be preserved. Normally the clip will be reset between each painter. Setting clipPreserved to true can be used to let one painter mask other painters that come after it.- Parameters:
shouldRestoreState
- new value of the clipPreserved property- See Also:
isClipPreserved()
-
getTransform
public java.awt.geom.AffineTransform getTransform()
Gets the current transform applied to all painters in this CompoundPainter. May be null.- Returns:
- the current AffineTransform
-
setTransform
public void setTransform(java.awt.geom.AffineTransform transform)
Set a transform to be applied to all painters contained in this CompoundPainter- Parameters:
transform
- a new AffineTransform
-
validate
protected void validate(T object)
Iterates over all child
Painter
s and gives them a chance to validate themselves. If any of the child painters are dirty, then thisCompoundPainter
marks itself as dirty.- Overrides:
validate
in classAbstractPainter<T>
-
isCheckingDirtyChildPainters
public boolean isCheckingDirtyChildPainters()
Used byisDirty()
to check if the childPainter
s should be checked for theirdirty
flag as part of processing.
Default value is:true
This should be set to false if the cacheable state of the childPainter
s are different from each other. This will allow the cacheable ==true
Painter
s to keep their cached image during regular repaints. In this case, client code should callclearCache()
manually when the cacheablePainter
s should be updated.- See Also:
isDirty()
-
setCheckingDirtyChildPainters
public void setCheckingDirtyChildPainters(boolean b)
Set the flag used byisDirty()
to check if the childPainter
s should be checked for theirdirty
flag as part of processing.- See Also:
isCheckingDirtyChildPainters()
,isDirty()
-
isDirty
protected boolean isDirty()
This
CompoundPainter
is dirty if it, or (optionally) any of its children, are dirty. If the super implementation returnstrue
, we returntrue
. Otherwise, if#isCheckForDirtyChildPainters()
istrue
, we iterate over all childPainter
s and query them to see if they are dirty. If so, thentrue
is returned. Otherwise, we returnfalse
.- Overrides:
isDirty
in classAbstractPainter<T>
- Returns:
- true if the painter state has changed and the painter needs to be repainted.
- See Also:
isCheckingDirtyChildPainters()
-
clearCache
public void clearCache()
Clears the cache of this
Painter
, and all childPainters
. This is done to ensure that resources are collected, even if clearCache is called by some framework or other code that doesn't realize this is a CompoundPainter.Call #clearLocalCache if you only want to clear the cache of this
CompoundPainter
- Overrides:
clearCache
in classAbstractPainter<T>
-
clearLocalCache
public void clearLocalCache()
Clears the cache of this painter only, and not of any of the children.
-
doPaint
protected void doPaint(java.awt.Graphics2D g, T component, int width, int height)
Description copied from class:AbstractPainter
Subclasses must implement this method and perform custom painting operations here.- Specified by:
doPaint
in classAbstractPainter<T>
- Parameters:
g
- The Graphics2D object in which to paint
-
configureGraphics
protected void configureGraphics(java.awt.Graphics2D g)
Description copied from class:AbstractPainter
This method is called by the
paint
method prior to any drawing operations to configure the drawing surface. The default implementation sets the rendering hints that have been specified for thisAbstractPainter
.This method can be overriden by subclasses to modify the drawing surface before any painting happens.
- Overrides:
configureGraphics
in classAbstractPainter<T>
- Parameters:
g
- the graphics surface to configure. This will never be null.- See Also:
AbstractPainter.paint(Graphics2D, Object, int, int)
-
shouldUseCache
protected boolean shouldUseCache()
Description copied from class:AbstractPainter
Returns true if the painter should use caching. This method allows subclasses to specify the heuristics regarding whether to cache or not. If a
Painter
has intelligent rules regarding painting times, and can more accurately indicate whether it should be cached, it could implement that logic in this method.- Overrides:
shouldUseCache
in classAbstractPainter<T>
- Returns:
- whether or not a cache should be used
-
-