NASA World Wind

gov.nasa.worldwind.examples.util
Class ImageViewer

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by gov.nasa.worldwind.examples.util.ImageViewer
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable

public class ImageViewer
extends JComponent

Component that displays an image.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
static String SCALE_BEST_FIT
           
static String SCALE_FIXED
           
static String SCALE_SHRINK_ONLY
           
 
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
ImageViewer()
           
 
Method Summary
protected  void clampOffset()
          Make sure the image does not leave the component edges, except when it is smaller.
protected  float computeBestFitScale()
          Compute a scaling factor so that the image fits inside the component.
protected  Point computeCenteringOffset(float scale)
          Compute offset so as to center the image inside the component.
 int getFadeTimeMillisec()
           
 BufferedImage getImage()
           
 URL getImageURL()
           
 Point getOffset()
           
 float getScale()
           
 String getScaleMode()
           
 float getZoomMultiplier()
           
 boolean isEnableMousePanAndZoom()
           
 boolean isFading()
           
 void paintComponent(Graphics g)
           
protected  void paintImage(Graphics2D g2)
           
 void resetPanAndZoom()
           
 void setEnableMousePanAndZoom(boolean state)
           
 void setFadeTimeMillisec(int millisec)
           
 void setImage(BufferedImage image)
           
 boolean setImageURL(URL imageURL)
           
 void setOffset(Point offset)
           
 void setScale(float scale)
           
 void setScaleMode(String scaleMode)
           
 void setZoomMultiplier(float multiplier)
           
protected  void updateCursor()
          Change the cursor to 'move' when the image is larger then the component.
protected  void updateOffsetForZoom(Point mousePoint, float oldScale, float newScale)
          Adjust the current offset after a scale change so that the part of the image under the mouse doesn't move.
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getAccessibleContext, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, 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, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, paramString, 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, updateUI
 
Methods inherited from class java.awt.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 java.awt.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, 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_BEST_FIT

public static final String SCALE_BEST_FIT
See Also:
Constant Field Values

SCALE_FIXED

public static final String SCALE_FIXED
See Also:
Constant Field Values

SCALE_SHRINK_ONLY

public static final String SCALE_SHRINK_ONLY
See Also:
Constant Field Values
Constructor Detail

ImageViewer

public ImageViewer()
Method Detail

clampOffset

protected void clampOffset()
Make sure the image does not leave the component edges, except when it is smaller.


computeBestFitScale

protected float computeBestFitScale()
Compute a scaling factor so that the image fits inside the component.

Returns:
the appropriate scaling factor.

computeCenteringOffset

protected Point computeCenteringOffset(float scale)
Compute offset so as to center the image inside the component.

Parameters:
scale - the current draw scale.
Returns:
the appropriate offset Point.

getFadeTimeMillisec

public int getFadeTimeMillisec()

getImage

public BufferedImage getImage()

getImageURL

public URL getImageURL()

getOffset

public Point getOffset()

getScale

public float getScale()

getScaleMode

public String getScaleMode()

getZoomMultiplier

public float getZoomMultiplier()

isEnableMousePanAndZoom

public boolean isEnableMousePanAndZoom()

isFading

public boolean isFading()

paintComponent

public void paintComponent(Graphics g)
Overrides:
paintComponent in class JComponent

paintImage

protected void paintImage(Graphics2D g2)

resetPanAndZoom

public void resetPanAndZoom()

setEnableMousePanAndZoom

public void setEnableMousePanAndZoom(boolean state)

setFadeTimeMillisec

public void setFadeTimeMillisec(int millisec)

setImage

public void setImage(BufferedImage image)

setImageURL

public boolean setImageURL(URL imageURL)

setOffset

public void setOffset(Point offset)

setScale

public void setScale(float scale)

setScaleMode

public void setScaleMode(String scaleMode)

setZoomMultiplier

public void setZoomMultiplier(float multiplier)

updateCursor

protected void updateCursor()
Change the cursor to 'move' when the image is larger then the component.


updateOffsetForZoom

protected void updateOffsetForZoom(Point mousePoint,
                                   float oldScale,
                                   float newScale)
Adjust the current offset after a scale change so that the part of the image under the mouse doesn't move.

Note that the computeBestFit() scale combined with the computeCenteringOffset() results in the image center not moving. Here we determine the mouse point relative position from the image center, scale it and translate the current offset by the difference.

Parameters:
mousePoint - the mouse point relative to the component.
oldScale - the scaling factor before the zoom.
newScale - the scaling factor after the zoom.

NASA World Wind