Class PicturePanel

  • All Implemented Interfaces:
    java.awt.event.ComponentListener, java.awt.event.HierarchyListener, java.awt.event.MouseListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible, javax.swing.Scrollable

    public class PicturePanel
    extends javax.swing.JPanel
    implements java.awt.event.MouseListener, javax.swing.Scrollable, java.awt.event.ComponentListener, java.awt.event.HierarchyListener
    Hold and display a group of pictures.
    Author:
    derrick
    See Also:
    Serialized Form
    • Nested Class Summary

      • Nested classes/interfaces inherited from class javax.swing.JPanel

        javax.swing.JPanel.AccessibleJPanel
      • Nested classes/interfaces inherited from class javax.swing.JComponent

        javax.swing.JComponent.AccessibleJComponent
      • Nested classes/interfaces inherited from class java.awt.Container

        java.awt.Container.AccessibleAWTContainer
      • Nested classes/interfaces inherited from class java.awt.Component

        java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected static int BLOCK_INCREMENT
      Scrolling block increment (both directions).
      protected TileSet mMosaic
      The display mosaic.
      protected java.awt.Dimension mPreferredSize
      The preferred size of this component.
      protected Thumbelina mThumbelina
      The thumbelina object in use.
      protected static int UNIT_INCREMENT
      Scrolling unit increment (both directions).
      • Fields inherited from class javax.swing.JComponent

        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

        accessibleContext, 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

      Constructors 
      Constructor Description
      PicturePanel​(Thumbelina thumbelina)
      Creates a new instance of PicturePanel
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void adjustClipForInsets​(java.awt.Graphics graphics)
      Adjust the graphics clip region to account for insets.
      void bringToTop​(Picture picture)
      Move the given picture to the top of the Z order.
      protected java.awt.Dimension calculatePreferredSize()
      Compute the preferred size of the component.
      void componentHidden​(java.awt.event.ComponentEvent event)
      Invoked when the component has been made invisible.
      void componentMoved​(java.awt.event.ComponentEvent event)
      Invoked when the component's position changes.
      void componentResized​(java.awt.event.ComponentEvent event)
      Invoked when the container's size changes.
      void componentShown​(java.awt.event.ComponentEvent event)
      Invoked when the component has been made visible.
      protected void draw​(Picture picture, boolean add)
      Draw an image on screen.
      Picture find​(java.lang.String url)
      Find a picture with the given URL in the panel.
      java.awt.Dimension getPreferredScrollableViewportSize()
      Returns the preferred size of the viewport for a view component.
      java.awt.Dimension getPreferredSize()
      Get the preferred size of the component.
      int getScrollableBlockIncrement​(java.awt.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.
      boolean getScrollableTracksViewportHeight()
      Return true if a viewport should always force the height of this Scrollable to match the height of the viewport.
      boolean getScrollableTracksViewportWidth()
      Return true if a viewport should always force the width of this Scrollable to match the width of the viewport.
      int getScrollableUnitIncrement​(java.awt.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.
      void hierarchyChanged​(java.awt.event.HierarchyEvent event)
      Handles this components ancestor being added to a container.
      void mouseClicked​(java.awt.event.MouseEvent event)
      Invoked when the mouse button has been clicked (pressed and released) on a component.
      void mouseEntered​(java.awt.event.MouseEvent event)
      Invoked when the mouse enters a component.
      void mouseExited​(java.awt.event.MouseEvent event)
      Invoked when the mouse exits a component.
      void mousePressed​(java.awt.event.MouseEvent event)
      Handle left click on a picture by bringing it to the top.
      void mouseReleased​(java.awt.event.MouseEvent event)
      Invoked when a mouse button has been released on a component.
      void paint​(java.awt.Graphics graphics)
      Paints this component.
      void reset()
      Clears the panel, discarding any existing images.
      void setPreferredSize​(java.awt.Dimension dimension)
      Sets the preferred size of this component.
      void update​(java.awt.Graphics graphics)
      Updates this component.
      • Methods inherited from class javax.swing.JPanel

        getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
      • Methods inherited from class javax.swing.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, 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, 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, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction
      • 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, 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, 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, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • UNIT_INCREMENT

        protected static final int UNIT_INCREMENT
        Scrolling unit increment (both directions).
        See Also:
        Constant Field Values
      • BLOCK_INCREMENT

        protected static final int BLOCK_INCREMENT
        Scrolling block increment (both directions).
        See Also:
        Constant Field Values
      • mThumbelina

        protected Thumbelina mThumbelina
        The thumbelina object in use.
      • mMosaic

        protected TileSet mMosaic
        The display mosaic.
      • mPreferredSize

        protected java.awt.Dimension mPreferredSize
        The preferred size of this component. null initially, caches the results of calculatePreferredSize ().
    • Constructor Detail

      • PicturePanel

        public PicturePanel​(Thumbelina thumbelina)
        Creates a new instance of PicturePanel
        Parameters:
        thumbelina - The Thumeblina this panel is associated with.
    • Method Detail

      • reset

        public void reset()
        Clears the panel, discarding any existing images.
      • 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.
        Parameters:
        picture - The picture being brought forward.
      • find

        public Picture find​(java.lang.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.
        Parameters:
        url - The url to locate.
        Returns:
        The first picture encountered in the panel, or null if the picture was not found.
      • draw

        protected void draw​(Picture picture,
                            boolean add)
        Draw an image on screen.
        Parameters:
        picture - The picture to draw.
        add - If true, the picture is added to the history.
      • update

        public void update​(java.awt.Graphics graphics)
        Updates this component.
        Overrides:
        update in class javax.swing.JComponent
        Parameters:
        graphics - The graphics context in which to update the component.
      • adjustClipForInsets

        public void adjustClipForInsets​(java.awt.Graphics graphics)
        Adjust the graphics clip region to account for insets.
        Parameters:
        graphics - The graphics object to set the clip region for.
      • paint

        public void paint​(java.awt.Graphics graphics)
        Paints this component. Runs through the list of tiles and for every one that intersects the clip region performs a drawImage().
        Overrides:
        paint in class javax.swing.JComponent
        Parameters:
        graphics - The graphics context used to paint with.
      • getPreferredSize

        public java.awt.Dimension getPreferredSize()
        Get the preferred size of the component.
        Overrides:
        getPreferredSize in class javax.swing.JComponent
        Returns:
        The dimension of this component.
      • setPreferredSize

        public void setPreferredSize​(java.awt.Dimension dimension)
        Sets the preferred size of this component.
        Overrides:
        setPreferredSize in class javax.swing.JComponent
        Parameters:
        dimension - The new value to use for getPreferredSize() until recalculated.
      • calculatePreferredSize

        protected java.awt.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.
        Returns:
        The optimal dimension for this component.
      • mouseClicked

        public void mouseClicked​(java.awt.event.MouseEvent event)
        Invoked when the mouse button has been clicked (pressed and released) on a component. Not used.
        Specified by:
        mouseClicked in interface java.awt.event.MouseListener
        Parameters:
        event - The object providing details of the mouse event.
      • mouseReleased

        public void mouseReleased​(java.awt.event.MouseEvent event)
        Invoked when a mouse button has been released on a component. Not used.
        Specified by:
        mouseReleased in interface java.awt.event.MouseListener
        Parameters:
        event - The object providing details of the mouse event.
      • mouseEntered

        public void mouseEntered​(java.awt.event.MouseEvent event)
        Invoked when the mouse enters a component. Not used.
        Specified by:
        mouseEntered in interface java.awt.event.MouseListener
        Parameters:
        event - The object providing details of the mouse event.
      • mouseExited

        public void mouseExited​(java.awt.event.MouseEvent event)
        Invoked when the mouse exits a component. Not used.
        Specified by:
        mouseExited in interface java.awt.event.MouseListener
        Parameters:
        event - The object providing details of the mouse event.
      • mousePressed

        public void mousePressed​(java.awt.event.MouseEvent event)
        Handle left click on a picture by bringing it to the top.
        Specified by:
        mousePressed in interface java.awt.event.MouseListener
        Parameters:
        event - The object providing details of the mouse event.
      • getPreferredScrollableViewportSize

        public java.awt.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.
        Specified by:
        getPreferredScrollableViewportSize in interface javax.swing.Scrollable
        Returns:
        The preferredSize of a JViewport whose view is this Scrollable.
        See Also:
        JComponent.getPreferredSize()
      • getScrollableUnitIncrement

        public int getScrollableUnitIncrement​(java.awt.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.

        Specified by:
        getScrollableUnitIncrement in interface javax.swing.Scrollable
        Parameters:
        visibleRect - The view area visible within the viewport
        orientation - Either SwingConstants.VERTICAL or SwingConstants.HORIZONTAL.
        direction - Less than zero to scroll up/left, greater than zero for down/right.
        Returns:
        The "unit" increment for scrolling in the specified direction. This value should always be positive.
      • getScrollableBlockIncrement

        public int getScrollableBlockIncrement​(java.awt.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.

        Specified by:
        getScrollableBlockIncrement in interface javax.swing.Scrollable
        Parameters:
        visibleRect - The view area visible within the viewport
        orientation - Either SwingConstants.VERTICAL or SwingConstants.HORIZONTAL.
        direction - Less than zero to scroll up/left, greater than zero for down/right.
        Returns:
        The "block" increment for scrolling in the specified direction. This value should always be positive.
      • 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.

        Specified by:
        getScrollableTracksViewportWidth in interface javax.swing.Scrollable
        Returns:
        true if a viewport should force the Scrollables width to match its own.
      • 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.

        Specified by:
        getScrollableTracksViewportHeight in interface javax.swing.Scrollable
        Returns:
        true if a viewport should force the Scrollables height to match its own.
      • componentResized

        public void componentResized​(java.awt.event.ComponentEvent event)
        Invoked when the container's size changes. Un-caches the preferred size.
        Specified by:
        componentResized in interface java.awt.event.ComponentListener
        Parameters:
        event - The resize event.
      • componentMoved

        public void componentMoved​(java.awt.event.ComponentEvent event)
        Invoked when the component's position changes. Not used.
        Specified by:
        componentMoved in interface java.awt.event.ComponentListener
        Parameters:
        event - The component event.
      • componentShown

        public void componentShown​(java.awt.event.ComponentEvent event)
        Invoked when the component has been made visible. Not used.
        Specified by:
        componentShown in interface java.awt.event.ComponentListener
        Parameters:
        event - The component event.
      • componentHidden

        public void componentHidden​(java.awt.event.ComponentEvent event)
        Invoked when the component has been made invisible. Not used.
        Specified by:
        componentHidden in interface java.awt.event.ComponentListener
        Parameters:
        event - The component event.
      • hierarchyChanged

        public void hierarchyChanged​(java.awt.event.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.
        Specified by:
        hierarchyChanged in interface java.awt.event.HierarchyListener
        Parameters:
        event - The heirarchy event.