public class PicturePanel
extends JPanel
implements MouseListener, Scrollable, ComponentListener, HierarchyListener
Hold and display a group of pictures.
BLOCK_INCREMENT
protected static final int BLOCK_INCREMENT
Scrolling block increment (both directions).
UNIT_INCREMENT
protected static final int UNIT_INCREMENT
Scrolling unit increment (both directions).
mMosaic
protected TileSet mMosaic
The display mosaic.
mPreferredSize
protected Dimension mPreferredSize
The preferred size of this component.
null
initially, caches the results of
calculatePreferredSize ()
.
mThumbelina
protected Thumbelina mThumbelina
The thumbelina object in use.
adjustClipForInsets
public void adjustClipForInsets(Graphics graphics)
Adjust the graphics clip region to account for insets.
graphics
- The graphics object to set the clip region for.
bringToTop
public void bringToTop(Picture picture)
Move the given picture to the top of the Z order.
Adds it, even it if it doesn't exist.
Also puts the URL in the url text of the status bar.
picture
- The picture being brought forward.
calculatePreferredSize
protected Dimension calculatePreferredSize()
Compute the preferred size of the component.
Computes the minimum bounding rectangle covering all the pictures in
the panel. It then does some funky stuff to handle
embedding in the view port of a scroll pane, basically asking
up the ancestor heirarchy what size is available, and filling it.
- The optimal dimension for this component.
componentHidden
public void componentHidden(ComponentEvent event)
Invoked when the component has been made invisible.
Not used.
event
- The component event.
componentMoved
public void componentMoved(ComponentEvent event)
Invoked when the component's position changes.
Not used.
event
- The component event.
componentResized
public void componentResized(ComponentEvent event)
Invoked when the container's size changes.
Un-caches the preferred size.
event
- The resize event.
componentShown
public void componentShown(ComponentEvent event)
Invoked when the component has been made visible.
Not used.
event
- The component event.
draw
protected void draw(Picture picture,
boolean add)
Draw an image on screen.
picture
- The picture to draw.add
- If true
, the picture is added to the history.
find
public Picture find(String url)
Find a picture with the given URL in the panel.
This should really only be used to discover if the picture is still
visible. There could be more than one picture with the given URL
because it may be partially obscured by another picture, in which
case the pieces are each given their own picture object, but all
point at the same URL
and Image
.
- The first picture encountered in the panel,
or null if the picture was not found.
getPreferredScrollableViewportSize
public Dimension getPreferredScrollableViewportSize()
Returns the preferred size of the viewport for a view component.
For example the preferredSize of a JList component is the size
required to accommodate all of the cells in its list however the
value of preferredScrollableViewportSize is the size required for
JList.getVisibleRowCount() rows. A component without any properties
that would effect the viewport size should just return
getPreferredSize() here.
- The preferredSize of a JViewport whose view is this Scrollable.
JViewport.getPreferredSize
getPreferredSize
public Dimension getPreferredSize()
Get the preferred size of the component.
- The dimension of this component.
getScrollableBlockIncrement
public int getScrollableBlockIncrement(Rectangle visibleRect,
int orientation,
int direction)
Components that display logical rows or columns should compute
the scroll increment that will completely expose one block
of rows or columns, depending on the value of orientation.
Scrolling containers, like JScrollPane, will use this method
each time the user requests a block scroll.
visibleRect
- The view area visible within the viewportorientation
- Either SwingConstants.VERTICAL or
SwingConstants.HORIZONTAL.direction
- Less than zero to scroll up/left,
greater than zero for down/right.
- The "block" increment for scrolling in the specified direction.
This value should always be positive.
getScrollableTracksViewportHeight
public boolean getScrollableTracksViewportHeight()
Return true if a viewport should always force the height of this
Scrollable to match the height of the viewport. For example a
columnar text view that flowed text in left to right columns
could effectively disable vertical scrolling by returning
true here.
Scrolling containers, like JViewport, will use this method each
time they are validated.
true
if a viewport should force the Scrollables
height to match its own.
getScrollableTracksViewportWidth
public boolean getScrollableTracksViewportWidth()
Return true if a viewport should always force the width of this
Scrollable
to match the width of the viewport.
For example a normal
text view that supported line wrapping would return true here, since it
would be undesirable for wrapped lines to disappear beyond the right
edge of the viewport. Note that returning true for a Scrollable
whose ancestor is a JScrollPane effectively disables horizontal
scrolling.
Scrolling containers, like JViewport, will use this method each
time they are validated.
true
if a viewport should force the Scrollables
width to match its own.
getScrollableUnitIncrement
public int getScrollableUnitIncrement(Rectangle visibleRect,
int orientation,
int direction)
Components that display logical rows or columns should compute
the scroll increment that will completely expose one new row
or column, depending on the value of orientation. Ideally,
components should handle a partially exposed row or column by
returning the distance required to completely expose the item.
Scrolling containers, like JScrollPane, will use this method
each time the user requests a unit scroll.
visibleRect
- The view area visible within the viewportorientation
- Either SwingConstants.VERTICAL or
SwingConstants.HORIZONTAL.direction
- Less than zero to scroll up/left,
greater than zero for down/right.
- The "unit" increment for scrolling in the specified direction.
This value should always be positive.
hierarchyChanged
public void hierarchyChanged(HierarchyEvent event)
Handles this components ancestor being added to a container.
Registers this component as a listener for size changes on the
ancestor so that we may un-cache the prefereed size and force
a recalculation.
event
- The heirarchy event.
mouseClicked
public void mouseClicked(MouseEvent event)
Invoked when the mouse button has been clicked
(pressed and released) on a component.
Not used.
event
- The object providing details of the mouse event.
mouseEntered
public void mouseEntered(MouseEvent event)
Invoked when the mouse enters a component.
Not used.
event
- The object providing details of the mouse event.
mouseExited
public void mouseExited(MouseEvent event)
Invoked when the mouse exits a component.
Not used.
event
- The object providing details of the mouse event.
mousePressed
public void mousePressed(MouseEvent event)
Handle left click on a picture by bringing it to the top.
event
- The object providing details of the mouse event.
mouseReleased
public void mouseReleased(MouseEvent event)
Invoked when a mouse button has been released on a component.
Not used.
event
- The object providing details of the mouse event.
paint
public void paint(Graphics graphics)
Paints this component.
Runs through the list of tiles and for every one that intersects
the clip region performs a drawImage()
.
graphics
- The graphics context used to paint with.
reset
public void reset()
Clears the panel, discarding any existing images.
setPreferredSize
public void setPreferredSize(Dimension dimension)
Sets the preferred size of this component.
dimension
- The new value to use for
getPreferredSize()
until recalculated.
update
public void update(Graphics graphics)
Updates this component.
graphics
- The graphics context in which to update the component.