Class FVSlider

All Implemented Interfaces:
MouseListener, MouseMotionListener, ImageObserver, MenuContainer, Serializable, EventListener, Accessible, ChangeListener, SwingConstants

public class FVSlider extends JSlider implements ChangeListener, MouseMotionListener, MouseListener
 Custom slider that acts as the scroll bar for the FVTable. This slider listens for
 changes to the viewport and updates its position accordingly.
 
 Q. Why not just use the standard JScrollBar that comes with the JScrollPane?
 
 A. It's because we are viewing only a portion of the total file at any given time.
    If we used the standard scroll mechanism, it would size itself and its viewport
    according to that subset of the total file, while we want it to reflect the file
    in its entirety.
 
 Q. Why extend a JSlider for this custom scroll bar instead of a JScrollBar?
 
 A. The JSlider is much easier to customize, specifically when trying to adjust
    the size of the slider thumb. Functionally they are both acceptable for our
    purposes, but the ease of using the slider wins out.
 
See Also:
  • Constructor Details

  • Method Details

    • setValue

      public void setValue(long filePos)
      Sets the value of the slider based on the given file position.
      Parameters:
      filePos -
    • setMaximum

      public void setMaximum(long fileSize)
      Sets the maximum slider position given the size of the file. If the file position is greater than the maximum size of an integer, we just set it to that maximum size.
      Parameters:
      fileSize -
    • syncWithViewport

      public void syncWithViewport()
      Updates the slider so it is in sync with the current position of the viewport. Note that this is only done if the mouse is NOT down; if it is, it means the user is moving the thumb and we should do nothing.
    • stateChanged

      public void stateChanged(ChangeEvent e)
      Invoked when the slider value has changed. When this happens we need to update the viewport to match, but ONLY if this event is triggered as a result of the user manually moving the slider (and not as a result of the slider being moved programmatically in response to a viewport change).
      Specified by:
      stateChanged in interface ChangeListener
    • mouseDragged

      public void mouseDragged(MouseEvent e)
      MOUSE EVENTS We need to set the mouseDown attribute so we only initiate a viewport update if the slider is moving in response to user action on the slider.
      Specified by:
      mouseDragged in interface MouseMotionListener
    • mouseMoved

      public void mouseMoved(MouseEvent e)
      Specified by:
      mouseMoved in interface MouseMotionListener
    • mouseClicked

      public void mouseClicked(MouseEvent e)
      Specified by:
      mouseClicked in interface MouseListener
    • mousePressed

      public void mousePressed(MouseEvent e)
      Specified by:
      mousePressed in interface MouseListener
    • mouseReleased

      public void mouseReleased(MouseEvent e)
      Specified by:
      mouseReleased in interface MouseListener
    • mouseEntered

      public void mouseEntered(MouseEvent e)
      Specified by:
      mouseEntered in interface MouseListener
    • mouseExited

      public void mouseExited(MouseEvent e)
      Specified by:
      mouseExited in interface MouseListener
    • getFilePosition

      public long getFilePosition(int sliderPos)
      Returns the file position (long) for the given slider position (int). This is calculated by computing the position of the slider as a percentage of its maximum, and applying the same to the file position (relative to the total file size).
      Parameters:
      sliderPos -
      Returns: