Package org.geotools.swing
Class AbstractMapPane
- Object
-
- Component
-
- Container
-
- JComponent
-
- JPanel
-
- 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'sJPanel
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
-
Fields inherited from class JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
-
Fields inherited from class Component
accessibleContext, 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
Constructors Constructor Description AbstractMapPane(MapContent content, RenderingExecutor executor)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
addMapPaneListener(MapPaneListener listener)
Adds a listener to receiveMapPaneEvent
s.void
addMouseListener(MapMouseListener listener)
Registers an object that wishes to receiveMapMouseEvent
s such as a JMapStatusBar.protected void
afterImageMoved()
Called after the base image has been dragged.protected void
doSetDisplayArea(Bounds envelope)
Helper method for setDisplayArea(org.geotools.api.geometry.Bounds) which is also called by other methods that want to set the display area without provoking repainting of the displayprotected 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 theMapConent
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 collectionvoid
layerMoved(MapLayerListEvent event)
Triggered when a group of layers chenges position in the layer listvoid
layerPreDispose(MapLayerListEvent event)
Triggered when a layer is about to be disposed.void
layerRemoved(MapLayerListEvent event)
Called when a map layer has been removedvoid
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 listenersvoid
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 displayvoid
setCursorTool(CursorTool tool)
Sets the current cursor tool.void
setDisplayArea(Bounds envelope)
Sets the area to display in world units.protected void
setForNewSize()
protected boolean
setFullExtent()
Determines the full extent of ofvoid
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 theMapContent
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, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, 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, 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, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, 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, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
-
-
-
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.
-
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 interfaceMapPane
- 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 interfaceMapPane
- Parameters:
dispatcher
- the new dispatcher (may benull
)
-
setRenderingExecutor
public void setRenderingExecutor(RenderingExecutor executor)
Sets the rendering executor. Ifexecutor
isnull
, the default DefaultRenderingExecutor will be set on the next call to getRenderingExecutor().- Parameters:
executor
- 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 ornull
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 classComponent
- Parameters:
ignoreRepaint
- if false, paint requests will be handled normally; if true, 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:
setIgnoreRepaint(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.
-
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 theMapConent
instance containing the layers being displayed by this map pane.- Specified by:
getMapContent
in interfaceMapPane
- Returns:
- the map content
-
setMapContent
public void setMapContent(MapContent content)
Sets theMapContent
instance containing the layers to display.- Specified by:
setMapContent
in interfaceMapPane
- Parameters:
content
- the map content
-
getDisplayArea
public ReferencedEnvelope getDisplayArea()
Gets the current display area in world coordinates. This is a short-cut formapPane.getMapContent().getViewport().getBounds()
. If a MapContent object has not yet been associated with the map pane, an emptyReferencedEnvelope
is returned.- Specified by:
getDisplayArea
in interfaceMapPane
- Returns:
- the display area in world coordinates
-
setDisplayArea
public void setDisplayArea(Bounds envelope)
Sets the area to display in world units.- Specified by:
setDisplayArea
in interfaceMapPane
- Parameters:
envelope
- the new display area
-
doSetDisplayArea
protected void doSetDisplayArea(Bounds envelope)
Helper method for setDisplayArea(org.geotools.api.geometry.Bounds) 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
-
getScreenToWorldTransform
public AffineTransform getScreenToWorldTransform()
Gets the screen to world coordinate transform. This is a short-cut formapPane.getMapContent().getViewport().getScreenToWorld()
.- Specified by:
getScreenToWorldTransform
in interfaceMapPane
- Returns:
- the screen to world coordinate transform
-
getWorldToScreenTransform
public AffineTransform getWorldToScreenTransform()
Gets the world to screen coordinate transform. This is a short-cut formapPane.getMapContent().getViewport().getWorldToScreen()
.The returned
AffineTransform
can be used to determine the current drawing scale...double scale = mapPane.getWorldToScreenTransform().getScaleX();
- Specified by:
getWorldToScreenTransform
in interfaceMapPane
- Returns:
- the world to screen coordinate transform
-
addMapPaneListener
public void addMapPaneListener(MapPaneListener listener)
Adds a listener to receiveMapPaneEvent
s.- Specified by:
addMapPaneListener
in interfaceMapPane
- Parameters:
listener
- the listener to add
-
removeMapPaneListener
public void removeMapPaneListener(MapPaneListener listener)
Removes the specified listener.- Specified by:
removeMapPaneListener
in interfaceMapPane
- Parameters:
listener
- the listener to remove
-
addMouseListener
public void addMouseListener(MapMouseListener listener)
Registers an object that wishes to receiveMapMouseEvent
s such as a JMapStatusBar.- Specified by:
addMouseListener
in interfaceMapPane
- Parameters:
listener
- the listener to add- See Also:
MapMouseListener
-
removeMouseListener
public void removeMouseListener(MapMouseListener listener)
Removes the specified listener.- Specified by:
removeMouseListener
in interfaceMapPane
- Parameters:
listener
- the listener to remove
-
getCursorTool
public CursorTool getCursorTool()
Gets the current cursor tool.- Specified by:
getCursorTool
in interfaceMapPane
- Returns:
- the current cursor tool (may be
null
)
-
setCursorTool
public void setCursorTool(CursorTool tool)
Sets the current cursor tool.- Specified by:
setCursorTool
in interfaceMapPane
- Parameters:
tool
- the tool; ornull
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 interfaceMapLayerListListener
- Parameters:
event
- encapsulating the event information
-
layerRemoved
public void layerRemoved(MapLayerListEvent event)
Called when a map layer has been removed- Specified by:
layerRemoved
in interfaceMapLayerListListener
- 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 interfaceMapLayerListListener
- 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 interfaceMapLayerListListener
- 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 interfaceMapLayerListListener
- 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 interfaceMapBoundsListener
- 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 typeMapPaneEvent.Type.RENDERING_STARTED
to listeners.- Specified by:
onRenderingStarted
in interfaceRenderingExecutorListener
-
onRenderingCompleted
public void onRenderingCompleted(RenderingExecutorEvent event)
Called by the executor when rendering has been completed. Publishes a MapPaneEvent of typeMapPaneEvent.Type.RENDERING_STOPPED
to listeners.- Specified by:
onRenderingCompleted
in interfaceRenderingExecutorListener
-
onRenderingFailed
public void onRenderingFailed(RenderingExecutorEvent ev)
Called by the executor when rendering failed for some reason. Publishes a MapPaneEvent of typeMapPaneEvent.Type.RENDERING_STOPPED
to listeners.- Specified by:
onRenderingFailed
in interfaceRenderingExecutorListener
-
-