org.geotools.gui.swing
Class ZoomPane

java.lang.Object
  extended byjava.awt.Component
      extended byjava.awt.Container
          extended byjavax.swing.JComponent
              extended byorg.geotools.gui.swing.ZoomPane
All Implemented Interfaces:
DeformableViewer, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable
Direct Known Subclasses:
ImagePane, LiteRendererStyledMapPane, MapPane, Plot2D

public abstract class ZoomPane
extends javax.swing.JComponent
implements DeformableViewer

Base class for widget with a zoomable content. User can perform zooms using keyboard, menu or mouse. is an abstract class. Subclass must override at least two methods:

Subclass can also override reset(), which sets up the initial zoom. The default implementation sets up the initial zoom in such a way that the following relations are approximately held:

Logical coordinates provided by getPreferredArea(), after an affine transform described by zoom, match pixel coordinates provided by getZoomableBounds(Rectangle).

The "preferred area" is initially the same as getArea(). The user can specify a different preferred area with setPreferredArea(java.awt.geom.Rectangle2D). The user can also reduce zoomable bounds by inserting an empty border around the widget, e.g.:

  setBorder(BorderFactory.createEmptyBorder(top, left, bottom, right));
 

 

Zoom actions

Whatever action is performed by the user, all zoom commands are translated as calls to transform(java.awt.geom.AffineTransform). Derived classes can redefine this method if they want to take particular actions during zooms, for example, modifying the minimum and maximum of a graph's axes. The table below shows the keyboard presses assigned to each zoom:

Key Purpose Action name
Scroll up "Up"
Scroll down "Down"
Scroll left "Left"
Scroll right"Right"
Zoom in "ZoomIn"
Zoom out "ZoomOut"
Zoom "Zoom"
Default zoom"Reset"
Ctrl+ Anti-clockwise rotation"RotateLeft"
Ctrl+Clockwise rotation "RotateRight"

In this table, the last column gives the Strings by which the different actions which manage the zooms. For example, to zoom in, we must write getActionMap().get("ZoomIn").

Note: JScrollPane objects are not suitable for adding scrollbars to a object. Instead, use createScrollPane(). Once again, all movements performed by the user through the scrollbars will be translated by calls to transform(java.awt.geom.AffineTransform).

Since:
2.0
Version:
$Id: ZoomPane.java 17934 2006-02-09 09:08:30Z desruisseaux $
Author:
Martin Desruisseaux
See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
static int DEFAULT_ZOOM
          Constant indicating default zoom close to the maximum permitted zoom.
static int RESET
          Constant indicating the resetting of scale, rotation and translation to a default value which makes the whole graphic appear in a window.
static int ROTATE
          Constant indicating a rotation.
static int SCALE_X
          Constant indicating the scale changes on the x axis.
static int SCALE_Y
          Constant indicating the scale changes on the y axis.
static int TRANSLATE_X
          Constant indicating the translations on the x axis.
static int TRANSLATE_Y
          Constant indicating the translations on the y axis.
static int UNIFORM_SCALE
          Constant indicating the scale changes on the x and y axes, with the added condition that these changes must be uniform.
protected  java.awt.geom.AffineTransform zoom
          Affine transform containing zoom factors, translations and rotations.
 
Fields inherited from class javax.swing.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 java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
ZoomPane(int type)
          Construct a .
 
Method Summary
 void addMouseListener(java.awt.event.MouseListener listener)
          Adds an object to the list of objects interested in being notified about mouse events.
 void addZoomChangeListener(ZoomChangeListener listener)
          Adds an object to the list of objects interested in being notified about zoom changes.
 void buildNavigationMenu(javax.swing.JMenu menu)
          Adds navigation options to the specified menu.
 void correctApparentPixelPosition(java.awt.geom.Point2D point)
          Corrects a pixel's coordinates for removing the effect of the magnifying glass.
 javax.swing.JComponent createScrollPane()
          Returns an object which displays this with the scrollbars.
protected  void fireZoomChanged(java.awt.geom.AffineTransform change)
          Signals that a zoom change has taken place.
abstract  java.awt.geom.Rectangle2D getArea()
          Returns a bounding box that contains the logical coordinates of all data that may be displayed in this .
protected  java.awt.Dimension getDefaultSize()
          Returns the default size for this component.
 java.awt.Insets getInsets()
          Returns the Insets of this component.
 java.awt.Insets getInsets(java.awt.Insets insets)
          Returns the Insets of this component.
 java.awt.Paint getMagnifierBorder()
          Returns the color of the magnifying glass's border.
 java.awt.Paint getMagnifierGlass()
          Returns the color with which to tint magnifying glass.
protected  javax.swing.JPopupMenu getMagnifierMenu(java.awt.event.MouseEvent event)
          Method called automatically when the user clicks on the right mouse button inside the magnifying glass.
protected  java.awt.Shape getMouseSelectionShape(java.awt.geom.Point2D point)
          Returns the geometric shape to be used to delimitate an area.
protected  javax.swing.JPopupMenu getPopupMenu(java.awt.event.MouseEvent event)
          Method called automatically when the user clicks on the right mouse button.
 java.awt.geom.Rectangle2D getPreferredArea()
          Returns the logical coordinates of the region that we want to see displayed the first time that appears on the screen.
protected  java.awt.geom.Dimension2D getPreferredPixelSize()
          Returns the preferred pixel size for a close zoom.
 double getScaleFactor()
          Returns the current zoom scale factor.
 java.awt.geom.Rectangle2D getVisibleArea()
          Returns the logical coordinates of the region visible on the screen.
protected  java.awt.Rectangle getZoomableBounds(java.awt.Rectangle bounds)
          Returns the bounding box (in pixel coordinates) of the zoomable area.
 boolean hasPreferredArea()
          Indicates whether the logical coordinates of a region have been defined.
 boolean isMagnifierEnabled()
          Indicates whether or not the magnifying glass is allowed to be displayed on this component.
 boolean isMagnifierVisible()
          Indicates whether or not the magnifying glass is visible.
 boolean isPaintingWhileAdjusting()
          Indicates whether or not this object should be repainted when the user moves the scrollbar slider.
protected  void mouseSelectionPerformed(java.awt.Shape area)
          Method called automatically after the user selects an area with the mouse.
protected  void paintComponent(java.awt.Graphics graphics)
          Paints this component.
protected abstract  void paintComponent(java.awt.Graphics2D graphics)
          Paints this component.
protected  void paintMagnifier(java.awt.Graphics2D graphics)
          Paints the magnifying glass.
protected  void printComponent(java.awt.Graphics graphics)
          Prints this component.
protected  void printComponent(java.awt.Graphics2D graphics)
          Prints this component.
 void removeZoomChangeListener(ZoomChangeListener listener)
          Removes an object from the list of objects interested in being notified about zoom changes.
 void repaint(long tm, int x, int y, int width, int height)
          Declares that a part of this pane needs to be repainted.
 void reset()
          Reinitializes the affine transform zoom in order to cancel any zoom, rotation or translation.
protected  void reset(java.awt.Rectangle zoomableBounds, boolean yAxisUpward)
          Reinitializes the affine transform zoom in order to cancel any zoom, rotation or translation.
 void scrollRectToVisible(java.awt.Rectangle rect)
          Modifies the position in pixels of the visible part of .
 void setMagnifierBorder(java.awt.Paint color)
          Set the color of the magnifying glass's border.
 void setMagnifierEnabled(boolean enabled)
          Specifies whether or not the magnifying glass is allowed to be displayed on this component.
 void setMagnifierGlass(java.awt.Paint color)
          Set the color with which to tint magnifying glass.
 void setMagnifierVisible(boolean visible)
          Displays or hides the magnifying glass.
 void setPaintingWhileAdjusting(boolean flag)
          Defines whether or not this object should repaint the map when the user moves the scrollbar slider.
 void setPreferredArea(java.awt.geom.Rectangle2D area)
          Specifies the logical coordinates of the region that we want to see displayed the first time that appears on the screen.
protected  void setResetPolicy(boolean fill)
          Set the policy for the zoom when the content is initially drawn or when the user resets the zoom.
 void setVisibleArea(java.awt.geom.Rectangle2D logicalBounds)
          Defines the limits of the visible part, in logical coordinates.
 void tieModels(javax.swing.BoundedRangeModel x, javax.swing.BoundedRangeModel y)
          Synchronises the position and the range of the models x and y with the position of the zoom.
 void transform(java.awt.geom.AffineTransform change)
          Changes the zoom by applying an affine transform.
 void transformPixels(java.awt.geom.AffineTransform change)
          Changes the zoom by applying an affine transform.
 void untieModels(javax.swing.BoundedRangeModel x, javax.swing.BoundedRangeModel y)
          Cancels the synchronisation between the specified x and y models and the zoom of this object.
 void updateUI()
          Informs that the GUI has changed.
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getAccessibleContext, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getGraphics, getHeight, getInputMap, getInputMap, getInputVerifier, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isPreferredSizeSet, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFont, setForeground, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMouseWheelListeners, getName, getParent, getPeer, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, 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, processMouseEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

SCALE_X

public static final int SCALE_X
Constant indicating the scale changes on the x axis.

See Also:
Constant Field Values

SCALE_Y

public static final int SCALE_Y
Constant indicating the scale changes on the y axis.

See Also:
Constant Field Values

UNIFORM_SCALE

public static final int UNIFORM_SCALE
Constant indicating the scale changes on the x and y axes, with the added condition that these changes must be uniform. This flag combines SCALE_X and SCALE_Y. The inverse, however, (SCALE_X|SCALE_Y) doesn't imply .

See Also:
Constant Field Values

TRANSLATE_X

public static final int TRANSLATE_X
Constant indicating the translations on the x axis.

See Also:
Constant Field Values

TRANSLATE_Y

public static final int TRANSLATE_Y
Constant indicating the translations on the y axis.

See Also:
Constant Field Values

ROTATE

public static final int ROTATE
Constant indicating a rotation.

See Also:
Constant Field Values

RESET

public static final int RESET
Constant indicating the resetting of scale, rotation and translation to a default value which makes the whole graphic appear in a window. This command is translated by a call to reset().

See Also:
Constant Field Values

DEFAULT_ZOOM

public static final int DEFAULT_ZOOM
Constant indicating default zoom close to the maximum permitted zoom. This zoom should allow details of the graphic to be seen without being overly big. Note: this flag will only have any effect if at least one of the SCALE_X and SCALE_Y flags is not also specified.

See Also:
Constant Field Values

zoom

protected final java.awt.geom.AffineTransform zoom
Affine transform containing zoom factors, translations and rotations. During the painting of a component, this affine transform should be combined with a call to Graphics2D.transform(zoom).

Constructor Detail

ZoomPane

public ZoomPane(int type)
         throws java.lang.IllegalArgumentException
Construct a .

Parameters:
type - Allowed zoom type. It can be a bitwise combination of the following constants: SCALE_X, SCALE_Y, UNIFORM_SCALE, TRANSLATE_X, TRANSLATE_Y, ROTATE, RESET and DEFAULT_ZOOM.
Throws:
java.lang.IllegalArgumentException - If is invalid.
Method Detail

reset

public void reset()
Reinitializes the affine transform zoom in order to cancel any zoom, rotation or translation. The default implementation initializes the affine transform zoom in order to make the y axis point upwards and make the whole of the region covered by the getPreferredArea() logical coordinates appear in the panel.

Note: for the derived classes: is the only method of which doesn't have to pass through transform(AffineTransform) to modify the zoom. This exception is necessary to avoid falling into an infinite loop.


reset

protected final void reset(java.awt.Rectangle zoomableBounds,
                           boolean yAxisUpward)
Reinitializes the affine transform zoom in order to cancel any zoom, rotation or translation. The argument indicates whether the y axis should point upwards. The value lets it point downwards. This method is offered for convenience sake for derived classes which want to redefine reset().

Parameters:
zoomableBounds - Coordinates, in pixels, of the screen space in which to draw. This argument will usually be getZoomableBounds(null).
yAxisUpward - if the y axis should point upwards rather than downwards.

setResetPolicy

protected void setResetPolicy(boolean fill)
Set the policy for the zoom when the content is initially drawn or when the user resets the zoom. Value means that the panel should initially be completely filled, even if the content partially falls outside the panel's bounds. Value means that the full content should appear in the panel, even if some space is not used. Default value is .


getArea

public abstract java.awt.geom.Rectangle2D getArea()
Returns a bounding box that contains the logical coordinates of all data that may be displayed in this . For example, if this is to display a geographic map, then this method should return the map's bounds in degrees of latitude and longitude. This bounding box is completely independent of any current zoom setting and will change only if the content changes.

Returns:
A bounding box for the logical coordinates of all contents that are going to be drawn in this . If this bounding box is unknown, then this method can return (but this is not recommended).

hasPreferredArea

public final boolean hasPreferredArea()
Indicates whether the logical coordinates of a region have been defined. This method returns if setPreferredArea(java.awt.geom.Rectangle2D) has been called with a non null argument.


getPreferredArea

public final java.awt.geom.Rectangle2D getPreferredArea()
Returns the logical coordinates of the region that we want to see displayed the first time that appears on the screen. This region will also be displayed each time the method {link #reset} is called. The default implementation goes as follows:

Returns:
The logical coordinates of the region to be initially displayed, or if these coordinates are unknown.

setPreferredArea

public final void setPreferredArea(java.awt.geom.Rectangle2D area)
Specifies the logical coordinates of the region that we want to see displayed the first time that appears on the screen. This region will also be displayed the first time that the method {link #reset} is called.


getVisibleArea

public final java.awt.geom.Rectangle2D getVisibleArea()
Returns the logical coordinates of the region visible on the screen. In the case of a geographic map, for example, the logical coordinates can be expressed in degrees of latitude/longitude or even in metres if a cartographic projection has been defined.


setVisibleArea

public void setVisibleArea(java.awt.geom.Rectangle2D logicalBounds)
                    throws java.lang.IllegalArgumentException
Defines the limits of the visible part, in logical coordinates. This method will modify the zoom and the translation in order to display the specified region. If zoom contains a rotation, this rotation will not be modified.

Parameters:
logicalBounds - Logical coordinates of the region to be displayed.
Throws:
java.lang.IllegalArgumentException - if is empty.

getZoomableBounds

protected java.awt.Rectangle getZoomableBounds(java.awt.Rectangle bounds)
Returns the bounding box (in pixel coordinates) of the zoomable area. This method is similar to JComponent.getBounds(Rectangle), except that the zoomable area may be smaller than the whole widget area. For example, a chart needs to keep some space for axes around the zoomable area. Another difference is that pixel coordinates are relative to the widget, i.e. the (0,0) coordinate lies on the upper left corner, no matter what its location on screen.

invokes when it needs to set up an initial zoom value. Subclasses should also set the clip area to this bounding box in their paintComponent(Graphics2D) method before setting the graphics transform. For example:

 graphics.clip(getZoomableBounds(null));
 graphics.transform(zoom);
 

Parameters:
bounds - An optional pre-allocated rectangle, or to create a new one. This argument is useful if the caller wants to avoid allocating a new object on the heap.
Returns:
The bounding box of the zoomable area, in pixel coordinates relative to this widget.

getDefaultSize

protected java.awt.Dimension getDefaultSize()
Returns the default size for this component. This is the size returned by JComponent.getPreferredSize() if no preferred size has been explicitly set with JComponent.setPreferredSize(java.awt.Dimension).

Returns:
The default size for this component.

getPreferredPixelSize

protected java.awt.geom.Dimension2D getPreferredPixelSize()
Returns the preferred pixel size for a close zoom. For image rendering, the preferred pixel size is the image's pixel size in logical units. For other kinds of rendering, this "pixel" size should be some reasonable resolution. The default implementation computes a default value from getArea().


getScaleFactor

public double getScaleFactor()
Returns the current zoom scale factor. A value of 1/100 means that 100 metres are displayed as 1 pixel (provided that the logical coordinates of getArea() are expressed in metres). Scale factors for X and Y axes can be computed separately using the following equations:
This method combines scale along both axes, which is correct if this has been constructed with the UNIFORM_SCALE type.


transform

public void transform(java.awt.geom.AffineTransform change)
Changes the zoom by applying an affine transform. The transform must express a change in logical units, for example, a translation in metres. This method is conceptually similar to the following code:
 zoom.concatenate(change);
 fireZoomChanged(change);
 repaint(getZoomableBounds(null));
 

Parameters:
change - The zoom change, as an affine transform in logical coordinates. If is the identity transform, then this method does nothing and listeners are not notified.

transformPixels

public void transformPixels(java.awt.geom.AffineTransform change)
Changes the zoom by applying an affine transform. The transform must express a change in pixel units, for example, a scrolling of 6 pixels toward right. This method is conceptually similar to the following code:
 zoom.preConcatenate(change);
 fireZoomChanged(change translated in logical units);
 repaint(getZoomableBounds(null));
 

Parameters:
change - The zoom change, as an affine transform in pixel coordinates. If is the identity transform, then this method does nothing and listeners are not notified.
Since:
2.1

addZoomChangeListener

public void addZoomChangeListener(ZoomChangeListener listener)
Adds an object to the list of objects interested in being notified about zoom changes.


removeZoomChangeListener

public void removeZoomChangeListener(ZoomChangeListener listener)
Removes an object from the list of objects interested in being notified about zoom changes.


addMouseListener

public void addMouseListener(java.awt.event.MouseListener listener)
Adds an object to the list of objects interested in being notified about mouse events.


fireZoomChanged

protected void fireZoomChanged(java.awt.geom.AffineTransform change)
Signals that a zoom change has taken place. Every object registered by the addZoomChangeListener(org.geotools.gui.swing.event.ZoomChangeListener) method will be notified of the change as soon as possible.

Parameters:
change - Affine transform which represents the change in the zoom. That is and are the affine transforms of the old and new zoom respectively. Therefore, the relation newZoom=oldZoom.concatenate(change) must be respected (to within rounding errors). Note: This method can modify to combine several consecutive calls of in a single transformation.

mouseSelectionPerformed

protected void mouseSelectionPerformed(java.awt.Shape area)
Method called automatically after the user selects an area with the mouse. The default implementation zooms to the selected . Derived classes can redefine this method in order to carry out another action.

Parameters:
area - Area selected by the user, in logical coordinates.

getMouseSelectionShape

protected java.awt.Shape getMouseSelectionShape(java.awt.geom.Point2D point)
Returns the geometric shape to be used to delimitate an area. This shape is generally a rectangle but could also be an ellipse, an arrow or another shape. The coordinates of the returned shape won't be taken into account. In fact, these coordinates will often be destroyed. The only things which count are the class of the returned shape (e.g. Ellipse2D vs Rectangle2D) and any of its parameters not related to its position (e.g. corner rounding in a rectangle RoundRectangle2D).

The returned shape will generally be from a class derived from RectangularShape, but can also be from the class Line2D. Any other class risks firing a ClassCastException at execution. The default implementation always returns a Rectangle2D object.

Parameters:
point - Logical coordinates of the mouse at the moment the button is pressed. This information can be used by derived classes that wish to consider the mouse position before choosing a geometric shape.
Returns:
Shape from the class {link RectangularShape} or {link Line2D}, or to indicate that we do not want to select with the mouse.

isMagnifierEnabled

public boolean isMagnifierEnabled()
Indicates whether or not the magnifying glass is allowed to be displayed on this component. By default, it is allowed.


setMagnifierEnabled

public void setMagnifierEnabled(boolean enabled)
Specifies whether or not the magnifying glass is allowed to be displayed on this component. Calling this method with the value will hide the magnifying glass, delete the choice "Display magnifying glass" from the contextual menu and lead to all calls to setMagnifierVisible(true) being ignored.


isMagnifierVisible

public boolean isMagnifierVisible()
Indicates whether or not the magnifying glass is visible. By default, it is not visible. Call setMagnifierVisible(boolean) to make it appear.


setMagnifierVisible

public void setMagnifierVisible(boolean visible)
Displays or hides the magnifying glass. If the magnifying glass is not visible and this method is called with the argument , the magnifying glass will appear at the centre of the window.


getMagnifierGlass

public java.awt.Paint getMagnifierGlass()
Returns the color with which to tint magnifying glass.


setMagnifierGlass

public void setMagnifierGlass(java.awt.Paint color)
Set the color with which to tint magnifying glass.


getMagnifierBorder

public java.awt.Paint getMagnifierBorder()
Returns the color of the magnifying glass's border.


setMagnifierBorder

public void setMagnifierBorder(java.awt.Paint color)
Set the color of the magnifying glass's border.


correctApparentPixelPosition

public final void correctApparentPixelPosition(java.awt.geom.Point2D point)
Corrects a pixel's coordinates for removing the effect of the magnifying glass. Without this method, transformations from pixels to geographic coordinates would not give accurate results for pixels inside the magnifier since the magnifier moves the pixel's apparent position. Invoking this method will remove deformation effects using the following steps:

Specified by:
correctApparentPixelPosition in interface DeformableViewer
Parameters:
point - In input, a pixel's coordinate as it appears on the screen. In output, the coordinate that the same pixel would have if the magnifier wasn't presents.

buildNavigationMenu

public void buildNavigationMenu(javax.swing.JMenu menu)
Adds navigation options to the specified menu. Menus such as "Zoom in" and "Zoom out" will be automatically added to the menu together with the appropriate short-cut keys.


getPopupMenu

protected javax.swing.JPopupMenu getPopupMenu(java.awt.event.MouseEvent event)
Method called automatically when the user clicks on the right mouse button. The default implementation displays a contextual menu containing navigation options.

Parameters:
event - Mouse event. This object contains the mouse coordinates in geographic coordinates (as well as pixel coordinates).
Returns:
The contextual menu, or to avoid displaying the menu.

getMagnifierMenu

protected javax.swing.JPopupMenu getMagnifierMenu(java.awt.event.MouseEvent event)
Method called automatically when the user clicks on the right mouse button inside the magnifying glass. The default implementation displays a contextual menu which contains magnifying glass options.

Parameters:
event - Mouse event containing amongst others, the mouse position.
Returns:
The contextual menu, or to avoid displaying the menu.

createScrollPane

public javax.swing.JComponent createScrollPane()
Returns an object which displays this with the scrollbars.


tieModels

public void tieModels(javax.swing.BoundedRangeModel x,
                      javax.swing.BoundedRangeModel y)
Synchronises the position and the range of the models x and y with the position of the zoom. The models x and y are generally associated with horizontal and vertical scrollbars. When the position of a scrollbar is adjusted, the zoom is consequently adjusted. Inversely, when the zoom is modified, the positions and ranges of the scrollbars are consequently adjusted.

Parameters:
x - Model of the horizontal scrollbar or if there isn't one.
y - Model of the vertical scrollbar or if there isn't one.

untieModels

public void untieModels(javax.swing.BoundedRangeModel x,
                        javax.swing.BoundedRangeModel y)
Cancels the synchronisation between the specified x and y models and the zoom of this object. The ChangeListener and ZoomChangeListener objects that were created are deleted.

Parameters:
x - Model of the horizontal scrollbar or if there isn't one.
y - Model of the vertical scrollbar or if there isn't one.

scrollRectToVisible

public void scrollRectToVisible(java.awt.Rectangle rect)
Modifies the position in pixels of the visible part of . is the size would be (in pixels) if its visible surface covered the whole of the getArea() region with the current zoom (Note: can be obtained by JComponent.getPreferredSize() if JComponent.setPreferredSize(java.awt.Dimension) hasn't been called with a non-null value). Therefore, by definition, the region getArea() converted into pixel space would give the rectangle bounds=Rectangle(0, 0, ,viewSize.width, ,viewSize.height).

This method allows us to define the sub-region of which must appear in the window.


isPaintingWhileAdjusting

public boolean isPaintingWhileAdjusting()
Indicates whether or not this object should be repainted when the user moves the scrollbar slider. The scrollbars (or other models) involved are those which have been synchronised with this object through the tieModels(javax.swing.BoundedRangeModel, javax.swing.BoundedRangeModel) method. The default value is , which means that will wait until the user releases the slider before repainting.


setPaintingWhileAdjusting

public void setPaintingWhileAdjusting(boolean flag)
Defines whether or not this object should repaint the map when the user moves the scrollbar slider. A fast computer is recommended if this flag is to be set to .


repaint

public void repaint(long tm,
                    int x,
                    int y,
                    int width,
                    int height)
Declares that a part of this pane needs to be repainted. This method simply redefines the method of the parent class in order to take into account a case where the magnifying glass is displayed.


paintMagnifier

protected void paintMagnifier(java.awt.Graphics2D graphics)
Paints the magnifying glass. This method is invoked after paintComponent(Graphics2D) if a magnifying glass is visible.


paintComponent

protected abstract void paintComponent(java.awt.Graphics2D graphics)
Paints this component. Subclass must override this method in order to draw the content. For most implementations, the first line in this method will be graphics.transform(zoom).


printComponent

protected void printComponent(java.awt.Graphics2D graphics)
Prints this component. The default implementation invokes paintComponent(Graphics2D).


paintComponent

protected final void paintComponent(java.awt.Graphics graphics)
Paints this component. This method is declared final in order to avoid unintentional overriding. Override paintComponent(Graphics2D) instead.


printComponent

protected final void printComponent(java.awt.Graphics graphics)
Prints this component. This method is declared final in order to avoid unintentional overriding. Override printComponent(Graphics2D) instead.


getInsets

public java.awt.Insets getInsets(java.awt.Insets insets)
Returns the Insets of this component. This method works like , but accepts a null argument. This method can be redefined if it is necessary to perform zooms on a part of the graphic rather than the whole thing.


getInsets

public final java.awt.Insets getInsets()
Returns the Insets of this component. This method is declared final in order to avoid confusion. If you want to return other Insets you must redefine getInsets(Insets).


updateUI

public void updateUI()
Informs that the GUI has changed. The user doesn't have to call this method directly.



Copyright © GeoTools. All Rights Reserved.