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'sJPanelclass 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 voidaddMapPaneListener(MapPaneListener listener)Adds a listener to receiveMapPaneEvents.voidaddMouseListener(MapMouseListener listener)Registers an object that wishes to receiveMapMouseEvents such as a JMapStatusBar.protected voidafterImageMoved()Called after the base image has been dragged.protected voiddoSetDisplayArea(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 voiddrawLayers(boolean recreate)Draws layers into one or more images which will then be displayed by the map pane.CursorToolgetCursorTool()Gets the current cursor tool.ReferencedEnvelopegetDisplayArea()Gets the current display area in world coordinates.KeyListenergetKeyHandler()Gets the current handler for keyboard actions.MapContentgetMapContent()Gets theMapConentinstance containing the layers being displayed by this map pane.MapMouseEventDispatchergetMouseEventDispatcher()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.longgetPaintDelay()Gets the current paint delay interval in milliseconds.RenderingExecutorgetRenderingExecutor()Gets the rendering executor, creating a default one if necessary.AffineTransformgetScreenToWorldTransform()Gets the screen to world coordinate transform.AffineTransformgetWorldToScreenTransform()Gets the world to screen coordinate transform.booleanisAcceptingRepaints()Query whether the map pane is currently accepting or ignoring repaint requests from other GUI components and the system.voidlayerAdded(MapLayerListEvent event)Called when a new map layer has been added.voidlayerChanged(MapLayerListEvent event)Called when a map layer has changed, e.g. features added to a displayed feature collectionvoidlayerMoved(MapLayerListEvent event)Triggered when a group of layers chenges position in the layer listvoidlayerPreDispose(MapLayerListEvent event)Triggered when a layer is about to be disposed.voidlayerRemoved(MapLayerListEvent event)Called when a map layer has been removedvoidmapBoundsChanged(MapBoundsEvent event)Called by the map content's viewport when its bounds have changed.voidmoveImage(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 voidonImageMoved()voidonRenderingCompleted(RenderingExecutorEvent event)Called by the executor when rendering has been completed.voidonRenderingFailed(RenderingExecutorEvent ev)Called by the executor when rendering failed for some reason.voidonRenderingStarted(RenderingExecutorEvent ev)Called by the executor when rendering has started.protected voidonShownOrResized()protected voidpublishEvent(MapPaneEvent ev)Publish a MapPaneEvent to registered listenersvoidremoveMapPaneListener(MapPaneListener listener)Removes the specified listener.voidremoveMouseListener(MapMouseListener listener)Removes the specified listener.voidreset()Reset the map area to include the full extent of all layers and redraw the displayvoidsetCursorTool(CursorTool tool)Sets the current cursor tool.voidsetDisplayArea(Bounds envelope)Sets the area to display in world units.protected voidsetForNewSize()protected booleansetFullExtent()Determines the full extent of ofvoidsetIgnoreRepaint(boolean ignoreRepaint)Specify whether the map pane should defer its normal repainting behaviour.voidsetKeyHandler(KeyListener controller)Sets a handler for keyboard actions which control the map pane's display.voidsetMapContent(MapContent content)Sets theMapContentinstance containing the layers to display.voidsetMouseEventDispatcher(MapMouseEventDispatcher dispatcher)Replaces the current mouse event dispatcher.voidsetPaintDelay(int delay)Sets the current paint delay interval in milliseconds.voidsetRenderingExecutor(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:
getMouseEventDispatcherin 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:
setMouseEventDispatcherin interfaceMapPane- Parameters:
dispatcher- the new dispatcher (may benull)
-
setRenderingExecutor
public void setRenderingExecutor(RenderingExecutor executor)
Sets the rendering executor. Ifexecutorisnull, 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 ornullto 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:
setIgnoreRepaintin 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 theMapConentinstance containing the layers being displayed by this map pane.- Specified by:
getMapContentin interfaceMapPane- Returns:
- the map content
-
setMapContent
public void setMapContent(MapContent content)
Sets theMapContentinstance containing the layers to display.- Specified by:
setMapContentin 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 emptyReferencedEnvelopeis returned.- Specified by:
getDisplayAreain interfaceMapPane- Returns:
- the display area in world coordinates
-
setDisplayArea
public void setDisplayArea(Bounds envelope)
Sets the area to display in world units.- Specified by:
setDisplayAreain 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:
getScreenToWorldTransformin 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
AffineTransformcan be used to determine the current drawing scale...double scale = mapPane.getWorldToScreenTransform().getScaleX();- Specified by:
getWorldToScreenTransformin interfaceMapPane- Returns:
- the world to screen coordinate transform
-
addMapPaneListener
public void addMapPaneListener(MapPaneListener listener)
Adds a listener to receiveMapPaneEvents.- Specified by:
addMapPaneListenerin interfaceMapPane- Parameters:
listener- the listener to add
-
removeMapPaneListener
public void removeMapPaneListener(MapPaneListener listener)
Removes the specified listener.- Specified by:
removeMapPaneListenerin interfaceMapPane- Parameters:
listener- the listener to remove
-
addMouseListener
public void addMouseListener(MapMouseListener listener)
Registers an object that wishes to receiveMapMouseEvents such as a JMapStatusBar.- Specified by:
addMouseListenerin interfaceMapPane- Parameters:
listener- the listener to add- See Also:
MapMouseListener
-
removeMouseListener
public void removeMouseListener(MapMouseListener listener)
Removes the specified listener.- Specified by:
removeMouseListenerin interfaceMapPane- Parameters:
listener- the listener to remove
-
getCursorTool
public CursorTool getCursorTool()
Gets the current cursor tool.- Specified by:
getCursorToolin interfaceMapPane- Returns:
- the current cursor tool (may be
null)
-
setCursorTool
public void setCursorTool(CursorTool tool)
Sets the current cursor tool.- Specified by:
setCursorToolin interfaceMapPane- Parameters:
tool- the tool; ornullfor 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:
layerAddedin interfaceMapLayerListListener- Parameters:
event- encapsulating the event information
-
layerRemoved
public void layerRemoved(MapLayerListEvent event)
Called when a map layer has been removed- Specified by:
layerRemovedin 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:
layerChangedin 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:
layerMovedin interfaceMapLayerListListener- Parameters:
event- encapsulating the event information
-
layerPreDispose
public void layerPreDispose(MapLayerListEvent event)
Triggered when a layer is about to be disposed.- Specified by:
layerPreDisposein 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:
mapBoundsChangedin 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:
trueif 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_STARTEDto listeners.- Specified by:
onRenderingStartedin interfaceRenderingExecutorListener
-
onRenderingCompleted
public void onRenderingCompleted(RenderingExecutorEvent event)
Called by the executor when rendering has been completed. Publishes a MapPaneEvent of typeMapPaneEvent.Type.RENDERING_STOPPEDto listeners.- Specified by:
onRenderingCompletedin interfaceRenderingExecutorListener
-
onRenderingFailed
public void onRenderingFailed(RenderingExecutorEvent ev)
Called by the executor when rendering failed for some reason. Publishes a MapPaneEvent of typeMapPaneEvent.Type.RENDERING_STOPPEDto listeners.- Specified by:
onRenderingFailedin interfaceRenderingExecutorListener
-
-