javax.swing.text.html
Class ImageView

java.lang.Object
  extended byjavax.swing.text.View
      extended byjavax.swing.text.html.ImageView
All Implemented Interfaces:
SwingConstants

public class ImageView
extends View

View of an Image, intended to support the HTML <IMG> tag. Supports scaling via the HEIGHT and WIDTH attributes of the tag. If the image is unable to be loaded any text specified via the ALT attribute will be rendered.

While this class has been part of swing for a while now, it is public as of 1.4.

Since:
1.4
Author:
Scott Violet
See Also:
IconView

Nested Class Summary
private  class ImageView.ImageHandler
          ImageHandler implements the ImageObserver to correctly update the display as new parts of the image become available.
private  class ImageView.ImageLabelView
          ImageLabelView is used if the image can't be loaded, and the attribute specified an alt attribute.
 
Field Summary
private  View altView
          Used for alt text.
private  AttributeSet attr
           
private  Color borderColor
           
private  short borderSize
           
private  short bottomInset
           
private  Container container
           
private static int DEFAULT_BORDER
          Default border to use if one is not specified.
private static int DEFAULT_HEIGHT
           
private static int DEFAULT_WIDTH
           
private  Rectangle fBounds
           
private  int height
           
private static int HEIGHT_FLAG
           
private  Image image
           
private static String IMAGE_CACHE_PROPERTY
          Document property for image cache.
private  ImageObserver imageObserver
          We don't directly implement ImageObserver, instead we use an instance that calls back to us.
private  short leftInset
           
private static int LINK_FLAG
           
private static int LOADING_FLAG
           
private static String MISSING_IMAGE_SRC
          File name for sMissingImageIcon.
private static String PENDING_IMAGE_SRC
          File name for sPendingImageIcon.
private static int RELOAD_FLAG
           
private static int RELOAD_IMAGE_FLAG
           
private  short rightInset
           
private static int sIncRate
          Repaint delay when some of the bits are available.
private static boolean sIsInc
          If true, when some of the bits are available a repaint is done.
private static Icon sMissingImageIcon
          Icon used if the image could not be found.
private static Icon sPendingImageIcon
          Icon used while the image is being loaded.
private  int state
          Bitmask containing some of the above bitmask values.
private static int SYNC_LOAD_FLAG
           
private  short topInset
           
private  float vAlign
          Alignment along the vertical (Y) axis.
private  int width
           
private static int WIDTH_FLAG
           
 
Fields inherited from class javax.swing.text.View
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, Y_AXIS
 
Fields inherited from interface javax.swing.SwingConstants
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST
 
Constructor Summary
ImageView(Element elem)
          Creates a new view that represents an IMG element.
 
Method Summary
 void changedUpdate(DocumentEvent e, Shape a, ViewFactory f)
          Invoked when the Elements attributes have changed.
 float getAlignment(int axis)
          Determines the desired alignment for this view along an axis.
 String getAltText()
          Returns the text to display if the image can't be loaded.
private  View getAltView()
          Returns the view to use for alternate text.
 AttributeSet getAttributes()
          Fetches the attributes to use when rendering.
 Image getImage()
          Returns the image to render.
 URL getImageURL()
          Return a URL for the image source, or null if it could not be determined.
private  int getIntAttr(HTML.Attribute name, int deflt)
          Convenience method for getting an integer attribute from the elements AttributeSet.
 Icon getLoadingImageIcon()
          Returns the icon to use while in the process of loading the image.
 boolean getLoadsSynchronously()
          Returns true if the image should be loaded when first asked for.
 Icon getNoImageIcon()
          Returns the icon to use if the image couldn't be found.
 float getPreferredSpan(int axis)
          Determines the preferred span for this view along an axis.
private  float getPreferredSpanFromAltView(int axis)
          Returns the preferred span of the View used to display the alt text, or 0 if the view does not exist.
protected  StyleSheet getStyleSheet()
          Convenience method to get the StyleSheet.
 String getToolTipText(float x, float y, Shape allocation)
          For images the tooltip text comes from text specified with the ALT attribute.
private  boolean hasPixels(Image image)
          Returns true if the passed in image has a non-zero width and height.
private  boolean isLink()
          Returns true if this image within a link?
private  void loadDefaultIconsIfNecessary()
           
private  void loadImage()
          Loads the image from the URL getImageURL.
private  Icon makeIcon(String gifFile)
           
 Shape modelToView(int pos, Shape a, Position.Bias b)
          Provides a mapping from the document model coordinate space to the coordinate space of the view mapped to it.
 void paint(Graphics g, Shape a)
          Paints the View.
private  void paintBorder(Graphics g, Rectangle rect)
           
private  void paintHighlights(Graphics g, Shape shape)
           
private  void refreshImage()
          Loads the image and updates the size accordingly.
private  void repaint(long delay)
          Request that this view be repainted.
private  void safePreferenceChanged()
          Invokes preferenceChanged on the event displatching thread.
 void setLoadsSynchronously(boolean newValue)
          Sets how the image is loaded.
 void setParent(View parent)
          Establishes the parent view for this view.
protected  void setPropertiesFromAttributes()
          Update any cached values that come from attributes.
 void setSize(float width, float height)
          Sets the size of the view.
private  void sync()
          Makes sure the necessary properties and image is loaded.
private  void updateAltTextView()
          Updates the view representing the alt text.
private  void updateBorderForNoImage()
          Invoked if no image is found, in which case a default border is used if one isn't specified.
private  void updateImageSize()
          Recreates and reloads the image.
 int viewToModel(float x, float y, Shape a, Position.Bias[] bias)
          Provides a mapping from the view coordinate space to the logical coordinate space of the model.
 
Methods inherited from class javax.swing.text.View
append, breakView, createFragment, forwardUpdate, forwardUpdateToView, getBreakWeight, getChildAllocation, getContainer, getDocument, getElement, getEndOffset, getGraphics, getMaximumSpan, getMinimumSpan, getNextVisualPositionFrom, getParent, getResizeWeight, getStartOffset, getView, getViewCount, getViewFactory, getViewIndex, getViewIndex, insert, insertUpdate, isVisible, modelToView, modelToView, preferenceChanged, remove, removeAll, removeUpdate, replace, updateChildren, updateLayout, viewToModel
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

sIsInc

private static boolean sIsInc
If true, when some of the bits are available a repaint is done.

This is set to false as swing does not offer a repaint that takes a delay. If this were true, a bunch of immediate repaints would get generated that end up significantly delaying the loading of the image (or anything else going on for that matter).


sIncRate

private static int sIncRate
Repaint delay when some of the bits are available.


sPendingImageIcon

private static Icon sPendingImageIcon
Icon used while the image is being loaded.


sMissingImageIcon

private static Icon sMissingImageIcon
Icon used if the image could not be found.


PENDING_IMAGE_SRC

private static final String PENDING_IMAGE_SRC
File name for sPendingImageIcon.

See Also:
Constant Field Values

MISSING_IMAGE_SRC

private static final String MISSING_IMAGE_SRC
File name for sMissingImageIcon.

See Also:
Constant Field Values

IMAGE_CACHE_PROPERTY

private static final String IMAGE_CACHE_PROPERTY
Document property for image cache.

See Also:
Constant Field Values

DEFAULT_WIDTH

private static final int DEFAULT_WIDTH
See Also:
Constant Field Values

DEFAULT_HEIGHT

private static final int DEFAULT_HEIGHT
See Also:
Constant Field Values

DEFAULT_BORDER

private static final int DEFAULT_BORDER
Default border to use if one is not specified.

See Also:
Constant Field Values

LOADING_FLAG

private static final int LOADING_FLAG
See Also:
Constant Field Values

LINK_FLAG

private static final int LINK_FLAG
See Also:
Constant Field Values

WIDTH_FLAG

private static final int WIDTH_FLAG
See Also:
Constant Field Values

HEIGHT_FLAG

private static final int HEIGHT_FLAG
See Also:
Constant Field Values

RELOAD_FLAG

private static final int RELOAD_FLAG
See Also:
Constant Field Values

RELOAD_IMAGE_FLAG

private static final int RELOAD_IMAGE_FLAG
See Also:
Constant Field Values

SYNC_LOAD_FLAG

private static final int SYNC_LOAD_FLAG
See Also:
Constant Field Values

attr

private AttributeSet attr

image

private Image image

width

private int width

height

private int height

state

private int state
Bitmask containing some of the above bitmask values. Because the image loading notification can happen on another thread access to this is synchronized (at least for modifying it).


container

private Container container

fBounds

private Rectangle fBounds

borderColor

private Color borderColor

borderSize

private short borderSize

leftInset

private short leftInset

rightInset

private short rightInset

topInset

private short topInset

bottomInset

private short bottomInset

imageObserver

private ImageObserver imageObserver
We don't directly implement ImageObserver, instead we use an instance that calls back to us.


altView

private View altView
Used for alt text. Will be non-null if the image couldn't be found, and there is valid alt text.


vAlign

private float vAlign
Alignment along the vertical (Y) axis.

Constructor Detail

ImageView

public ImageView(Element elem)
Creates a new view that represents an IMG element.

Parameters:
elem - the element to create a view for
Method Detail

getAltText

public String getAltText()
Returns the text to display if the image can't be loaded. This is obtained from the Elements attribute set with the attribute name HTML.Attribute.ALT.


getImageURL

public URL getImageURL()
Return a URL for the image source, or null if it could not be determined.


getNoImageIcon

public Icon getNoImageIcon()
Returns the icon to use if the image couldn't be found.


getLoadingImageIcon

public Icon getLoadingImageIcon()
Returns the icon to use while in the process of loading the image.


getImage

public Image getImage()
Returns the image to render.


setLoadsSynchronously

public void setLoadsSynchronously(boolean newValue)
Sets how the image is loaded. If newValue is true, the image we be loaded when first asked for, otherwise it will be loaded asynchronously. The default is to not load synchronously, that is to load the image asynchronously.


getLoadsSynchronously

public boolean getLoadsSynchronously()
Returns true if the image should be loaded when first asked for.


getStyleSheet

protected StyleSheet getStyleSheet()
Convenience method to get the StyleSheet.


getAttributes

public AttributeSet getAttributes()
Fetches the attributes to use when rendering. This is implemented to multiplex the attributes specified in the model with a StyleSheet.

Overrides:
getAttributes in class View

getToolTipText

public String getToolTipText(float x,
                             float y,
                             Shape allocation)
For images the tooltip text comes from text specified with the ALT attribute. This is overriden to return getAltText.

Overrides:
getToolTipText in class View
See Also:
JTextComponent.getToolTipText(java.awt.event.MouseEvent)

setPropertiesFromAttributes

protected void setPropertiesFromAttributes()
Update any cached values that come from attributes.


setParent

public void setParent(View parent)
Establishes the parent view for this view. Seize this moment to cache the AWT Container I'm in.

Overrides:
setParent in class View
Parameters:
parent - the new parent, or null if the view is being removed from a parent

changedUpdate

public void changedUpdate(DocumentEvent e,
                          Shape a,
                          ViewFactory f)
Invoked when the Elements attributes have changed. Recreates the image.

Overrides:
changedUpdate in class View
Parameters:
e - the change information from the associated document
a - the current allocation of the view
f - the factory to use to rebuild if the view has children
See Also:
View.changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)

paint

public void paint(Graphics g,
                  Shape a)
Paints the View.

Specified by:
paint in class View
Parameters:
g - the rendering surface to use
a - the allocated region to render into
See Also:
View.paint(java.awt.Graphics, java.awt.Shape)

paintHighlights

private void paintHighlights(Graphics g,
                             Shape shape)

paintBorder

private void paintBorder(Graphics g,
                         Rectangle rect)

getPreferredSpan

public float getPreferredSpan(int axis)
Determines the preferred span for this view along an axis.

Specified by:
getPreferredSpan in class View
Parameters:
axis - may be either X_AXIS or Y_AXIS
Returns:
the span the view would like to be rendered into; typically the view is told to render into the span that is returned, although there is no guarantee; the parent may choose to resize or break the view
See Also:
View.getPreferredSpan(int)

getAlignment

public float getAlignment(int axis)
Determines the desired alignment for this view along an axis. This is implemented to give the alignment to the bottom of the icon along the y axis, and the default along the x axis.

Overrides:
getAlignment in class View
Parameters:
axis - may be either X_AXIS or Y_AXIS
Returns:
the desired alignment; this should be a value between 0.0 and 1.0 where 0 indicates alignment at the origin and 1.0 indicates alignment to the full span away from the origin; an alignment of 0.5 would be the center of the view

modelToView

public Shape modelToView(int pos,
                         Shape a,
                         Position.Bias b)
                  throws BadLocationException
Provides a mapping from the document model coordinate space to the coordinate space of the view mapped to it.

Specified by:
modelToView in class View
Parameters:
pos - the position to convert
a - the allocated region to render into
b - the bias toward the previous character or the next character represented by the offset, in case the position is a boundary of two views; b will have one of these values:
  • Position.Bias.Forward
  • Position.Bias.Backward
Returns:
the bounding box of the given position
Throws:
BadLocationException - if the given position does not represent a valid location in the associated document
See Also:
View.modelToView(int, java.awt.Shape, javax.swing.text.Position.Bias)

viewToModel

public int viewToModel(float x,
                       float y,
                       Shape a,
                       Position.Bias[] bias)
Provides a mapping from the view coordinate space to the logical coordinate space of the model.

Specified by:
viewToModel in class View
Parameters:
x - the X coordinate
y - the Y coordinate
a - the allocated region to render into
Returns:
the location within the model that best represents the given point of view
See Also:
View.viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])

setSize

public void setSize(float width,
                    float height)
Sets the size of the view. This should cause layout of the view if it has any layout duties.

Overrides:
setSize in class View
Parameters:
width - the width >= 0
height - the height >= 0

isLink

private boolean isLink()
Returns true if this image within a link?


hasPixels

private boolean hasPixels(Image image)
Returns true if the passed in image has a non-zero width and height.


getPreferredSpanFromAltView

private float getPreferredSpanFromAltView(int axis)
Returns the preferred span of the View used to display the alt text, or 0 if the view does not exist.


makeIcon

private Icon makeIcon(String gifFile)
               throws IOException
Throws:
IOException

repaint

private void repaint(long delay)
Request that this view be repainted. Assumes the view is still at its last-drawn location.


loadDefaultIconsIfNecessary

private void loadDefaultIconsIfNecessary()

getIntAttr

private int getIntAttr(HTML.Attribute name,
                       int deflt)
Convenience method for getting an integer attribute from the elements AttributeSet.


sync

private void sync()
Makes sure the necessary properties and image is loaded.


refreshImage

private void refreshImage()
Loads the image and updates the size accordingly. This should be invoked instead of invoking loadImage or updateImageSize directly.


loadImage

private void loadImage()
Loads the image from the URL getImageURL. This should only be invoked from refreshImage.


updateImageSize

private void updateImageSize()
Recreates and reloads the image. This should only be invoked from refreshImage.


updateAltTextView

private void updateAltTextView()
Updates the view representing the alt text.


getAltView

private View getAltView()
Returns the view to use for alternate text. This may be null.


safePreferenceChanged

private void safePreferenceChanged()
Invokes preferenceChanged on the event displatching thread.


updateBorderForNoImage

private void updateBorderForNoImage()
Invoked if no image is found, in which case a default border is used if one isn't specified.