All Implemented Interfaces:
ComponentListener, MouseListener, MouseWheelListener, ImageObserver, MenuContainer, Serializable, EventListener, Accessible

public class JCarosel extends GradientPanel implements MouseListener, MouseWheelListener
A carousel component which lays out components around a carousel, moving each to the front as it is clicked on. Double clicking will fire the action associated with the compnent if it has one, or give it the focus if it does not. Note this will be changed to only allow RichComponents in the future.
See Also:
  • Field Details

    • FRONT_COMPONENT_CHANGE

      public static final String FRONT_COMPONENT_CHANGE
      The property that is set when a new component comes to the front. To use it add a property change listener for it, useful for keeping animations synchronized.
      See Also:
    • layout

      protected CaroselLayout layout
      The layout being used for the carousel
    • lastWheeledTo

      protected Component lastWheeledTo
      The last component the wheel selected. Used to ensure we don't move too far around why they are wheeling and they turn back on themselves creating a nasty oscilation in the animation (everything works fine, it's just not purty)
    • DEFAULT_CONTENT_WIDTH

      protected int DEFAULT_CONTENT_WIDTH
      The prefered width of the components in the container, everything will be scaled to this width for neutral scaling (1.0)
    • spinStartDelay

      protected int spinStartDelay
      Delay in milliseconds from the first click to the start of the spin, this gives implementors using a double click anywhere to fire an event a chance for their users to get the double click message before the component spins around.
  • Constructor Details

    • JCarosel

      public JCarosel()
      Creates a new instance of JCarosel
    • JCarosel

      public JCarosel(int contentWidth)
      Creates a new Carousel specifying the prefered width up front
      Parameters:
      contentWidth - The prefered width of component at neutral scale (3 or 9 o'clock)
  • Method Details

    • setContentWidth

      public void setContentWidth(int contentWidth)
      Sets the prefered width of the components inside the carousel, this is the neutral width that will change as the component is scaled, but at 9 and 6 o'clock where the scale is one they will be this width.
      Parameters:
      contentWidth - The prefered width.
    • setDepthBasedAlpha

      public void setDepthBasedAlpha(boolean useDepthBased)
      If set to true the carousel will fade out components as they move away from the front of the carousel (6 o'clock)
      Parameters:
      useDepthBased - True to fade components as they move to the back, false to not do it
    • setLayout

      public void setLayout(CaroselLayout layout)
      Specifies which type of CarouselLayout to be used to lay the component out around the carousel Any looping layout can be used. Mobius strip layout anyone?
      Parameters:
      layout - The carousel layout to use
    • add

      public Component add(Component component)
      Adds a component to the carousel
      Overrides:
      add in class Container
      Parameters:
      component - The component to add to the carousel
      Returns:
      The component
    • add

      public Component add(Image image, String text)
      Adds an image to the carousel
      Parameters:
      image - The image to add
      text - The text label
      Returns:
      The component created, normally a reflected image label
    • remove

      public void remove(Component component)
      Removes the component from the carousel
      Overrides:
      remove in class Container
      Parameters:
      component - The component to remove
    • add

      @Deprecated public Component add(String imageURL, int width, int height)
      Deprecated.
      This function will be removed, use add(String imageURL) instead.
      The image to add and it's width and height
      Parameters:
      imageURL - The URL
      width - The desired rendering width
      height - The desired rendering height
      Returns:
      The component created
    • add

      @Deprecated public Component add(String imageURL, String text, int width, int height)
      Deprecated.
      This function will be removed, use setNeutralWidth() on JCarousel instead.
      Add the image, and it's label to the carousel
      Parameters:
      imageURL - The image URL
      text - The text label
      width - The width
      height - The height
      Returns:
      The component created to hold the image
    • bringToFront

      public void bringToFront(Component component)
      Brings the specified component to the front of the carousel
      Parameters:
      component - The component to bring to the front
    • getFrontmost

      public Component getFrontmost()
      Which component is at the front
      Returns:
      The component at the front (by default 6 o'clock)
    • mouseClicked

      public void mouseClicked(MouseEvent mouseEvent)
      Bring the "clicked" component to the front. Delays by 200ms to allow for a double click
      Specified by:
      mouseClicked in interface MouseListener
      Parameters:
      mouseEvent - Brings the component clicked on by the mouse to the front
    • setSpinStartDelay

      public void setSpinStartDelay(int spinStartDelay)
      Sets the delay between clicking on a component in the carousel, and the spin starting to move that component to the front. The longer it is, the easier it is to double click on a non-front component
      Parameters:
      spinStartDelay - Spin start delay.
    • getSpinStartDelay

      public int getSpinStartDelay()
      Returns the spin start delay
      Returns:
      The delay in ms between the click and the spin
    • insertComponentAt

      public void insertComponentAt(int i, Component comp)
      Inserts a component at the specified index
      Parameters:
      i - The index
      comp - The component
    • insertAt

      public Component insertAt(int i, String imageURL, int width, int height)
      Inserts a new object at a specific location
      Parameters:
      i - The position on the carousel
      imageURL - The URL of the image
      width - The width of the image
      height - The height of the image
      Returns:
      The component created to show the image (usually a ReflectedImageLabel but this may change)
    • insertAt

      public Component insertAt(int i, String imageURL, String text, int width, int height)
      Inserts a new object at a specific location
      Parameters:
      i - The position on the carousel
      imageURL - The URL of the image
      text - The text label
      width - The prefered width of the image
      height - The prefered height of the image
      Returns:
      The component created to represent the image, currently reflected image label but may change
    • finalizeLayoutImmediately

      public void finalizeLayoutImmediately()
      Moves everything to their final positions
    • mousePressed

      public void mousePressed(MouseEvent mouseEvent)
      Not interested
      Specified by:
      mousePressed in interface MouseListener
      Parameters:
      mouseEvent - Ignored
    • mouseReleased

      public void mouseReleased(MouseEvent mouseEvent)
      Not interested
      Specified by:
      mouseReleased in interface MouseListener
      Parameters:
      mouseEvent - Ignored
    • mouseEntered

      public void mouseEntered(MouseEvent mouseEvent)
      Not interested
      Specified by:
      mouseEntered in interface MouseListener
      Parameters:
      mouseEvent - Ignored
    • mouseExited

      public void mouseExited(MouseEvent mouseEvent)
      Not interested
      Specified by:
      mouseExited in interface MouseListener
      Parameters:
      mouseEvent - Ignored
    • mouseWheelMoved

      public void mouseWheelMoved(MouseWheelEvent mouseWheelEvent)
      When event received will spin the carousel to select the next object. Because the wheel can be spun quicker than the carousel animates it keeps track of the target (so the user may have selected something three components away, althought the animation has not yet finished moving past the first comopnent)
      Specified by:
      mouseWheelMoved in interface MouseWheelListener
      Parameters:
      mouseWheelEvent - The event object
    • add

      public Component add(String imageURL)
      Adds a new image to the carousel
      Parameters:
      imageURL - The image
      Returns:
      The component created
    • add

      public Component add(String imageURL, String textLabel)
      Adds a new image to the carousel
      Parameters:
      imageURL - The image
      textLabel - The label
      Returns:
      The component created