Class AbstractMultiSlider.DispatcherPane

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
org.djutils.swing.multislider.AbstractMultiSlider.DispatcherPane
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable
Enclosing class:
AbstractMultiSlider<T>

protected static class AbstractMultiSlider.DispatcherPane extends JComponent
The DispatcherPane class, which is a glass pane sitting on top of the sliders to dispatch the mouse event to the correct slider class. Note that the mouse coordinates are relative to the component itself, so a translation might be needed. The SwingUtilities.convertPoint() method can make the conversion.
See Also:
  • Field Details

    • multiSlider

      protected final AbstractMultiSlider<?> multiSlider
      the pointer to the multislider object; protected to access it by the mouse handlers.
  • Constructor Details

    • DispatcherPane

      public DispatcherPane(AbstractMultiSlider<?> multiSlider)
      Create a glass pane on top of the sliders.
      Parameters:
      multiSlider - the multislider for which this is the glass pane
  • Method Details

    • closestSliderIndex

      int closestSliderIndex(Point p)
      Return the closest slider number based on x (horizontal) or y (vertical) locations of the thumbs. When two or more thumbs are at the exact same distance (e.g., because they overlap), the first slider found that has a movement option in the direction of the mouse will be returned.
      Parameters:
      p - the point (e.g., of a mouse position)
      Returns:
      the index(es) of the closest slider(s)
    • dispatch

      int dispatch(MouseEvent e, boolean always)
      Parameters:
      e - the MouseEvent to dispatch to the sliders.
      always - indicates whether we always need to send the event
      Returns:
      the slider index to which the event was dispatched; -1 if none
    • setBusySlider

      void setBusySlider(int index)
      Reset the busy slider -- action over. Call this method BEFORE processing the MouseEvent. In that way, the ChangeListener will fire a StateChange while the busy slider is -1 -- indicating that there is a final value.
      Parameters:
      index - the slider number that is busy, or -1 if none
    • setBusy

      void setBusy(boolean b)
      Indicate whether the multislider is busy with handling an action (e.g., drag, mouse down). Note that the busy flag has to be set BEFORE the mouse event is handled, to allow a listener to the ChangeEvent to only react when an action is completed.
      Parameters:
      b - whether the multislider is busy with handling an action or not
    • checkRestrictions

      void checkRestrictions(int index)
      Check whether minimum, maximum, passing or overlap restrictions were violated, and if so, adjust.
      Parameters:
      index - the slider number for which to check