org.geotools.swing
Class AbstractMapPane

Object
  extended by Component
      extended by Container
          extended by JComponent
              extended by JPanel
                  extended by AbstractMapPane
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, EventListener, Accessible, MapBoundsListener, MapLayerListListener, MapPane, RenderingExecutorListener
Direct Known Subclasses:
JLayeredMapPane, JMapPane

public abstract class AbstractMapPane
extends JPanel
implements MapPane, RenderingExecutorListener, MapLayerListListener, MapBoundsListener

Base class for Swing map panes. It extends Swing's JPanel class and handles window sizing and repainting as well as redirecting mouse events. It also provides basic implementations of all interface methods. Sub-classes must implement drawLayers(boolean) and override JComponent.paintComponent(java.awt.Graphics).

Since:
8.0
Author:
Michael Bedward
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class JPanel
JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class JComponent
JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
protected  AtomicBoolean acceptRepaintRequests
           
protected  AtomicBoolean baseImageMoved
           
protected  AtomicBoolean clearLabelCache
           
protected  CursorTool currentCursorTool
           
static Color DEFAULT_BACKGROUND_COLOR
          Default background color (white).
static int DEFAULT_PAINT_DELAY
          Default delay (500 milliseconds) before the map will be redrawn when resizing the pane or moving the displayed image.
protected  MouseDragBox dragBox
           
protected  Lock drawingLock
           
protected  ReferencedEnvelope fullExtent
           
protected  Future<?> imageMovedFuture
           
protected  Point imageOrigin
           
protected  KeyListener keyHandler
           
protected  LabelCache labelCache
           
protected  Set<MapPaneListener> listeners
           
protected  MapContent mapContent
           
protected  MapMouseEventDispatcher mouseEventDispatcher
           
protected  int paintDelay
           
protected  ScheduledExecutorService paneTaskExecutor
           
protected  ReadWriteLock paramsLock
           
protected  ReferencedEnvelope pendingDisplayArea
           
protected  RenderingExecutor renderingExecutor
           
protected  Future<?> resizedFuture
           
 
Fields inherited from class 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 Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
AbstractMapPane(MapContent content, RenderingExecutor executor)
           
 
Method Summary
 void addMapPaneListener(MapPaneListener listener)
          Adds a listener to receive MapPaneEvents.
 void addMouseListener(MapMouseListener listener)
          Registers an object that wishes to receive MapMouseEvents such as a StatusBar.
protected  void afterImageMoved()
          Called after the base image has been dragged.
protected  void doSetDisplayArea(Envelope envelope)
          Helper method for setDisplayArea(org.opengis.geometry.Envelope) which is also called by other methods that want to set the display area without provoking repainting of the display
protected abstract  void drawLayers(boolean recreate)
          Draws layers into one or more images which will then be displayed by the map pane.
 CursorTool getCursorTool()
          Gets the current cursor tool.
 ReferencedEnvelope getDisplayArea()
          Gets the current display area in world coordinates.
 KeyListener getKeyHandler()
          Gets the current handler for keyboard actions.
 MapContent getMapContent()
          Gets the MapConent instance containing the layers being displayed by this map pane.
 MapMouseEventDispatcher getMouseEventDispatcher()
          Gets the current mouse event dispatcher which is responsible for converting each input Java AWT mouse event into a MapMouseEvent and forwarding it to each MapMouseListener.
 long getPaintDelay()
          Gets the current paint delay interval in milliseconds.
 RenderingExecutor getRenderingExecutor()
          Gets the rendering executor, creating a default one if necessary.
 AffineTransform getScreenToWorldTransform()
          Gets the screen to world coordinate transform.
 AffineTransform getWorldToScreenTransform()
          Gets the world to screen coordinate transform.
 boolean isAcceptingRepaints()
          Query whether the map pane is currently accepting or ignoring repaint requests from other GUI components and the system.
 void layerAdded(MapLayerListEvent event)
          Called when a new map layer has been added.
 void layerChanged(MapLayerListEvent event)
          Called when a map layer has changed, e.g. features added to a displayed feature collection
 void layerMoved(MapLayerListEvent event)
          Triggered when a group of layers chenges position in the layer list
 void layerPreDispose(MapLayerListEvent event)
          Triggered when a layer is about to be disposed.
 void layerRemoved(MapLayerListEvent event)
          Called when a map layer has been removed
 void mapBoundsChanged(MapBoundsEvent event)
          Called by the map content's viewport when its bounds have changed.
 void moveImage(int dx, int dy)
          Moves the image(s) displayed by the map pane from the current origin (x,y) (device pixels) to (x+dx, y+dy).
protected  void onImageMoved()
           
 void onRenderingCompleted(RenderingExecutorEvent event)
          Called by the executor when rendering has been completed.
 void onRenderingFailed(RenderingExecutorEvent ev)
          Called by the executor when rendering failed for some reason.
 void onRenderingStarted(RenderingExecutorEvent ev)
          Called by the executor when rendering has started.
protected  void onShownOrResized()
           
protected  void publishEvent(MapPaneEvent ev)
          Publish a MapPaneEvent to registered listeners
 void removeMapPaneListener(MapPaneListener listener)
          Removes the specified listener.
 void removeMouseListener(MapMouseListener listener)
          Removes the specified listener.
 void reset()
          Reset the map area to include the full extent of all layers and redraw the display
 void setCursorTool(CursorTool tool)
          Sets the current cursor tool.
 void setDisplayArea(Envelope envelope)
          Sets the area to display in world units.
protected  void setForNewSize()
           
protected  boolean setFullExtent()
          Determines the full extent of of
 void setIgnoreRepaint(boolean ignoreRepaint)
          Specify whether the map pane should defer its normal repainting behaviour.
 void setKeyHandler(KeyListener controller)
          Sets a handler for keyboard actions which control the map pane's display.
 void setMapContent(MapContent content)
          Sets the MapContent instance containing the layers to display.
 void setMouseEventDispatcher(MapMouseEventDispatcher dispatcher)
          Replaces the current mouse event dispatcher.
 void setPaintDelay(int delay)
          Sets the current paint delay interval in milliseconds.
 void setRenderingExecutor(RenderingExecutor executor)
          Sets the rendering executor.
 
Methods inherited from class JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class 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, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, 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 Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, 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 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, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DEFAULT_PAINT_DELAY

public static final int DEFAULT_PAINT_DELAY
Default delay (500 milliseconds) before the map will be redrawn when resizing the pane or moving the displayed image. This avoids flickering and redundant rendering.

See Also:
Constant Field Values

DEFAULT_BACKGROUND_COLOR

public static final Color DEFAULT_BACKGROUND_COLOR
Default background color (white).


paneTaskExecutor

protected final ScheduledExecutorService paneTaskExecutor

resizedFuture

protected Future<?> resizedFuture

paintDelay

protected int paintDelay

acceptRepaintRequests

protected final AtomicBoolean acceptRepaintRequests

baseImageMoved

protected final AtomicBoolean baseImageMoved

imageMovedFuture

protected Future<?> imageMovedFuture

imageOrigin

protected final Point imageOrigin

drawingLock

protected final Lock drawingLock

paramsLock

protected final ReadWriteLock paramsLock

listeners

protected final Set<MapPaneListener> listeners

dragBox

protected final MouseDragBox dragBox

pendingDisplayArea

protected ReferencedEnvelope pendingDisplayArea

fullExtent

protected ReferencedEnvelope fullExtent

mapContent

protected MapContent mapContent

renderingExecutor

protected RenderingExecutor renderingExecutor

keyHandler

protected KeyListener keyHandler

mouseEventDispatcher

protected MapMouseEventDispatcher mouseEventDispatcher

labelCache

protected LabelCache labelCache

clearLabelCache

protected AtomicBoolean clearLabelCache

currentCursorTool

protected CursorTool currentCursorTool
Constructor Detail

AbstractMapPane

public AbstractMapPane(MapContent content,
                       RenderingExecutor executor)
Method Detail

drawLayers

protected abstract void drawLayers(boolean recreate)
Draws layers into one or more images which will then be displayed by the map pane.

Parameters:
recreate -

getRenderingExecutor

public RenderingExecutor getRenderingExecutor()
Gets the rendering executor, creating a default one if necessary.

Returns:
the rendering executor

getMouseEventDispatcher

public MapMouseEventDispatcher getMouseEventDispatcher()
Gets the current mouse event dispatcher which is responsible for converting each input Java AWT mouse event into a MapMouseEvent and forwarding it to each MapMouseListener.

Specified by:
getMouseEventDispatcher in interface MapPane
Returns:
the current mouse event dispatcher (may be null)

setMouseEventDispatcher

public void setMouseEventDispatcher(MapMouseEventDispatcher dispatcher)
Replaces the current mouse event dispatcher. All current listeners will be removed. It is the responsibility of the client to add them to the new dispatcher if this is desired.

Specified by:
setMouseEventDispatcher in interface MapPane
Parameters:
dispatcher - the new dispatcher (may be null)

setRenderingExecutor

public void setRenderingExecutor(RenderingExecutor executor)
Sets the rendering executor. If executor is null, the default DefaultRenderingExecutor will be set on the next call to getRenderingExecutor().

Parameters:
newExecutor - the rendering executor

getKeyHandler

public KeyListener getKeyHandler()
Gets the current handler for keyboard actions.

Returns:
current handler (may be null)

setKeyHandler

public void setKeyHandler(KeyListener controller)
Sets a handler for keyboard actions which control the map pane's display. The default handler is MapPaneKeyHandler which provides for scrolling and zooming.

Parameters:
controller - the new handler or null to disable key handling

getPaintDelay

public long getPaintDelay()
Gets the current paint delay interval in milliseconds. The map pane uses this delay period to avoid flickering and redundant rendering when drag-resizing the pane or panning the map image.

Returns:
delay in milliseconds

setPaintDelay

public void setPaintDelay(int delay)
Sets the current paint delay interval in milliseconds. The map pane uses this delay period to avoid flickering and redundant rendering when drag-resizing the pane or panning the map image.

Parameters:
delay - the delay in milliseconds; if <= 0 the default delay period will be set

setIgnoreRepaint

public void setIgnoreRepaint(boolean ignoreRepaint)
Specify whether the map pane should defer its normal repainting behaviour.

Typical use:

myMapPane.setRepaint(false);

 // do various things that would cause time-consuming
 // re-paints normally

 myMapPane.setRepaint(true);
 myMapPane.repaint();
 

Overrides:
setIgnoreRepaint in class Component
Parameters:
repaint - if true, paint requests will be handled normally; if false, paint requests will be deferred.
See Also:
isAcceptingRepaints()

isAcceptingRepaints

public boolean isAcceptingRepaints()
Query whether the map pane is currently accepting or ignoring repaint requests from other GUI components and the system.

Returns:
true if the pane is currently accepting repaint requests; false if it is ignoring them
See Also:
#setRepaint(boolean)

onShownOrResized

protected void onShownOrResized()

setForNewSize

protected void setForNewSize()

moveImage

public void moveImage(int dx,
                      int dy)
Moves the image(s) displayed by the map pane from the current origin (x,y) (device pixels) to (x+dx, y+dy). If this method is called when the map pane is not visible, or when the pane's visible rectangle is empty, it is ignored.

Specified by:
moveImage in interface MapPane
Parameters:
dx - the x offset in pixels
dy - the y offset in pixels.

onImageMoved

protected void onImageMoved()

afterImageMoved

protected void afterImageMoved()
Called after the base image has been dragged. Sets the new map area and transforms


getMapContent

public MapContent getMapContent()
Gets the MapConent instance containing the layers being displayed by this map pane.

Specified by:
getMapContent in interface MapPane
Returns:
the map content

setMapContent

public void setMapContent(MapContent content)
Sets the MapContent instance containing the layers to display.

Specified by:
setMapContent in interface MapPane
Parameters:
content - the map content

getDisplayArea

public ReferencedEnvelope getDisplayArea()
Gets the current display area in world coordinates. This is a short-cut for mapPane.getMapContent().getViewport().getBounds(). If a MapContent object has not yet been associated with the map pane, an empty ReferencedEnvelope is returned.

Specified by:
getDisplayArea in interface MapPane
Returns:
the display area in world coordinates

setDisplayArea

public void setDisplayArea(Envelope envelope)
Sets the area to display in world units.

Specified by:
setDisplayArea in interface MapPane

doSetDisplayArea

protected void doSetDisplayArea(Envelope envelope)
Helper method for setDisplayArea(org.opengis.geometry.Envelope) which is also called by other methods that want to set the display area without provoking repainting of the display

Parameters:
envelope - requested display area

reset

public void reset()
Reset the map area to include the full extent of all layers and redraw the display

Specified by:
reset in interface MapPane

getScreenToWorldTransform

public AffineTransform getScreenToWorldTransform()
Gets the screen to world coordinate transform. This is a short-cut for mapPane.getMapContent().getViewport().getScreenToWorld().

Specified by:
getScreenToWorldTransform in interface MapPane
Returns:
the screen to world coordinate transform

getWorldToScreenTransform

public AffineTransform getWorldToScreenTransform()
Gets the world to screen coordinate transform. This is a short-cut for mapPane.getMapContent().getViewport().getWorldToScreen().

The returned AffineTransform can be used to determine the current drawing scale...


 double scale = mapPane.getWorldToScreenTransform().getScaleX();
 

Specified by:
getWorldToScreenTransform in interface MapPane
Returns:
the world to screen coordinate transform

addMapPaneListener

public void addMapPaneListener(MapPaneListener listener)
Adds a listener to receive MapPaneEvents.

Specified by:
addMapPaneListener in interface MapPane
Parameters:
listener - the listener to add

removeMapPaneListener

public void removeMapPaneListener(MapPaneListener listener)
Removes the specified listener.

Specified by:
removeMapPaneListener in interface MapPane
Parameters:
listener - the listener to remove

addMouseListener

public void addMouseListener(MapMouseListener listener)
Registers an object that wishes to receive MapMouseEvents such as a StatusBar.

Specified by:
addMouseListener in interface MapPane
Parameters:
listener - the listener to add
See Also:
MapMouseListener

removeMouseListener

public void removeMouseListener(MapMouseListener listener)
Removes the specified listener.

Specified by:
removeMouseListener in interface MapPane
Parameters:
listener - the listener to remove

getCursorTool

public CursorTool getCursorTool()
Gets the current cursor tool.

Specified by:
getCursorTool in interface MapPane
Returns:
the current cursor tool (may be null)

setCursorTool

public void setCursorTool(CursorTool tool)
Sets the current cursor tool.

Specified by:
setCursorTool in interface MapPane
Parameters:
tool - the tool; or null for no cursor tool

layerAdded

public void layerAdded(MapLayerListEvent event)
Called when a new map layer has been added. Sets the layer as selected (for queries) and, if the layer table is being used, adds the new layer to the table.

Specified by:
layerAdded in interface MapLayerListListener
Parameters:
event - encapsulating the event information

layerRemoved

public void layerRemoved(MapLayerListEvent event)
Called when a map layer has been removed

Specified by:
layerRemoved in interface MapLayerListListener
Parameters:
event - encapsulating the event information

layerChanged

public void layerChanged(MapLayerListEvent event)
Called when a map layer has changed, e.g. features added to a displayed feature collection

Specified by:
layerChanged in interface MapLayerListListener
Parameters:
event - encapsulating the event information

layerMoved

public void layerMoved(MapLayerListEvent event)
Triggered when a group of layers chenges position in the layer list

Specified by:
layerMoved in interface MapLayerListListener
Parameters:
event - encapsulating the event information

layerPreDispose

public void layerPreDispose(MapLayerListEvent event)
Triggered when a layer is about to be disposed.

Specified by:
layerPreDispose in interface MapLayerListListener
Parameters:
event - encapsulating the event information

mapBoundsChanged

public void mapBoundsChanged(MapBoundsEvent event)
Called by the map content's viewport when its bounds have changed. Used here to watch for a changed CRS, in which case the map is re-displayed at full extent.

Specified by:
mapBoundsChanged in interface MapBoundsListener
Parameters:
event - The change event.

publishEvent

protected void publishEvent(MapPaneEvent ev)
Publish a MapPaneEvent to registered listeners

Parameters:
ev - the event to publish
See Also:
MapPaneListener

setFullExtent

protected boolean setFullExtent()
Determines the full extent of of

Returns:
true if full extent was set successfully

onRenderingStarted

public void onRenderingStarted(RenderingExecutorEvent ev)
Called by the executor when rendering has started. Publishes a MapPaneEvent of type MapPaneEvent.Type.RENDERING_STARTED to listeners.

Specified by:
onRenderingStarted in interface RenderingExecutorListener

onRenderingCompleted

public void onRenderingCompleted(RenderingExecutorEvent event)
Called by the executor when rendering has been completed. Publishes a MapPaneEvent of type MapPaneEvent.Type.RENDERING_STOPPED to listeners.

Specified by:
onRenderingCompleted in interface RenderingExecutorListener

onRenderingFailed

public void onRenderingFailed(RenderingExecutorEvent ev)
Called by the executor when rendering failed for some reason. Publishes a MapPaneEvent of type MapPaneEvent.Type.RENDERING_STOPPED to listeners.

Specified by:
onRenderingFailed in interface RenderingExecutorListener


Copyright © 1996-2014 Geotools. All Rights Reserved.