Class RangeSlider

All Implemented Interfaces:
Styleable, EventTarget, Skinnable

public class RangeSlider extends Control
The RangeSlider control is simply a JavaFX Slider control with support for two 'thumbs', rather than one. A thumb is the non-technical name for the draggable area inside the Slider / RangeSlider that allows for a value to be set.

Because the RangeSlider has two thumbs, it also has a few additional rules and user interactions:

  1. The 'lower value' thumb can not move past the 'higher value' thumb.
  2. Whereas the Slider control only has one value property, the RangeSlider has a low value and a high value property, not surprisingly represented by the 'low value' and 'high value' thumbs.
  3. The area between the low and high values represents the allowable range. For example, if the low value is 2 and the high value is 8, then the allowable range is between 2 and 8.
  4. The allowable range area is rendered differently. This area is able to be dragged with mouse / touch input to allow for the entire range to be modified. For example, following on from the previous example of the allowable range being between 2 and 8, if the user drags the range bar to the right, the low value will adjust to 3, and the high value 9, and so on until the user stops adjusting.

Screenshots

Because the RangeSlider supports both horizontal and vertical orientation, there are two screenshots below:
Horizontal: Screenshot of a horizontal RangeSlider
Vertical: Screenshot of a vertical RangeSlider

Code Samples

Instantiating a RangeSlider is simple. The first decision is to decide whether a horizontal or a vertical track is more appropriate. By default RangeSlider instances are horizontal, but this can be changed by setting the orientation property.

Once the orientation is determined, the next most important decision is to determine what the min / max and default low / high values are. The min / max values represent the smallest and largest legal values for the thumbs to be set to, whereas the low / high values represent where the thumbs are currently, within the bounds of the min / max values. Because all four values are required in all circumstances, they are all required parameters to instantiate a RangeSlider: the constructor takes four doubles, representing min, max, lowValue and highValue (in that order).

For example, here is a simple horizontal RangeSlider that has a minimum value of 0, a maximum value of 100, a low value of 10 and a high value of 90:

final RangeSlider hSlider = new RangeSlider(0, 100, 10, 90);

To configure the hSlider to look like the RangeSlider in the horizontal RangeSlider screenshot above only requires a few additional properties to be set:

 
 final RangeSlider hSlider = new RangeSlider(0, 100, 10, 90);
 hSlider.setShowTickMarks(true);
 hSlider.setShowTickLabels(true);
 hSlider.setBlockIncrement(10);

To create a vertical slider, simply do the following:

 
 final RangeSlider vSlider = new RangeSlider(0, 200, 30, 150);
 vSlider.setOrientation(Orientation.VERTICAL);

This code creates a RangeSlider with a min value of 0, a max value of 200, a low value of 30, and a high value of 150.

See Also:
  • Property Details

    • lowValue

      public final DoubleProperty lowValueProperty
      The low value property represents the current position of the low value thumb, and is within the allowable range as specified by the min and max properties. By default this value is 0.
      See Also:
    • lowValueChanging

      public final BooleanProperty lowValueChangingProperty
      When true, indicates the current low value of this RangeSlider is changing. It provides notification that the low value is changing. Once the low value is computed, it is set back to false.
      See Also:
    • highValue

      public final DoubleProperty highValueProperty
      The high value property represents the current position of the high value thumb, and is within the allowable range as specified by the min and max properties. By default this value is 100.
      See Also:
    • highValueChanging

      public final BooleanProperty highValueChangingProperty
      When true, indicates the current high value of this RangeSlider is changing. It provides notification that the high value is changing. Once the high value is computed, it is set back to false.
      See Also:
    • labelFormatter

      public final ObjectProperty<StringConverter<Number>> labelFormatterProperty
      StringConverter used to format tick mark labels. If null a default will be used.
      See Also:
    • max

      public final DoubleProperty maxProperty
      Returns:
      A DoubleProperty representing the maximum value of this Slider. This must be a value greater than min.
    • min

      public final DoubleProperty minProperty
      See Also:
    • snapToTicks

      public final BooleanProperty snapToTicksProperty
      Indicates whether the lowValueProperty() value} / highValueProperty() value} of the Slider should always be aligned with the tick marks. This is honored even if the tick marks are not shown.
      Returns:
      A BooleanProperty.
    • majorTickUnit

      public final DoubleProperty majorTickUnitProperty
      The unit distance between major tick marks. For example, if the min is 0 and the max is 100 and the majorTickUnit is 25, then there would be 5 tick marks: one at position 0, one at position 25, one at position 50, one at position 75, and a final one at position 100.

      This value should be positive and should be a value less than the span. Out of range values are essentially the same as disabling tick marks.

      Returns:
      A DoubleProperty
    • minorTickCount

      public final IntegerProperty minorTickCountProperty
      The number of minor ticks to place between any two major ticks. This number should be positive or zero. Out of range values will disable disable minor ticks, as will a value of zero.
      Returns:
      An InterProperty
    • blockIncrement

      public final DoubleProperty blockIncrementProperty
      The amount by which to adjust the slider if the track of the slider is clicked. This is used when manipulating the slider position using keys. If snapToTicks is true then the nearest tick mark to the adjusted value will be used.
      Returns:
      A DoubleProperty
    • orientation

      public final ObjectProperty<Orientation> orientationProperty
      The orientation of the Slider can either be horizontal or vertical.
      Returns:
      An Objectproperty representing the orientation of the Slider.
    • showTickLabels

      public final BooleanProperty showTickLabelsProperty
      Indicates that the labels for tick marks should be shown. Typically a Skin implementation will only show labels if showTickMarks is also true.
      See Also:
    • showTickMarks

      public final BooleanProperty showTickMarksProperty
      Returns:
      A BooleanProperty that specifies whether the Skin implementation should show tick marks.
  • Constructor Details

    • RangeSlider

      public RangeSlider()
      Creates a new RangeSlider instance using default values of 0.0, 0.25, 0.75 and 1.0 for min/lowValue/highValue/max, respectively.
    • RangeSlider

      public RangeSlider(double min, double max, double lowValue, double highValue)
      Instantiates a default, horizontal RangeSlider with the specified min/max/low/high values.
      Parameters:
      min - The minimum allowable value that the RangeSlider will allow.
      max - The maximum allowable value that the RangeSlider will allow.
      lowValue - The initial value for the low value in the RangeSlider.
      highValue - The initial value for the high value in the RangeSlider.
  • Method Details

    • getUserAgentStylesheet

      public String getUserAgentStylesheet()
      Overrides:
      getUserAgentStylesheet in class Region
    • createDefaultSkin

      protected Skin<?> createDefaultSkin()
      Overrides:
      createDefaultSkin in class Control
    • lowValueProperty

      public final DoubleProperty lowValueProperty()
      The low value property represents the current position of the low value thumb, and is within the allowable range as specified by the min and max properties. By default this value is 0.
      See Also:
    • setLowValue

      public final void setLowValue(double d)
      Sets the low value for the range slider, which may or may not be clamped to be within the allowable range as specified by the min and max properties.
    • getLowValue

      public final double getLowValue()
      Returns the current low value for the range slider.
    • lowValueChangingProperty

      public final BooleanProperty lowValueChangingProperty()
      When true, indicates the current low value of this RangeSlider is changing. It provides notification that the low value is changing. Once the low value is computed, it is set back to false.
      See Also:
    • setLowValueChanging

      public final void setLowValueChanging(boolean value)
      Call this when the low value is changing.
      Parameters:
      value - True if the low value is changing, false otherwise.
    • isLowValueChanging

      public final boolean isLowValueChanging()
      Returns whether or not the low value of this RangeSlider is currently changing.
    • highValueProperty

      public final DoubleProperty highValueProperty()
      The high value property represents the current position of the high value thumb, and is within the allowable range as specified by the min and max properties. By default this value is 100.
      See Also:
    • setHighValue

      public final void setHighValue(double d)
      Sets the high value for the range slider, which may or may not be clamped to be within the allowable range as specified by the min and max properties.
    • getHighValue

      public final double getHighValue()
      Returns the current high value for the range slider.
    • highValueChangingProperty

      public final BooleanProperty highValueChangingProperty()
      When true, indicates the current high value of this RangeSlider is changing. It provides notification that the high value is changing. Once the high value is computed, it is set back to false.
      See Also:
    • setHighValueChanging

      public final void setHighValueChanging(boolean value)
      Call this when high low value is changing.
      Parameters:
      value - True if the high value is changing, false otherwise.
    • isHighValueChanging

      public final boolean isHighValueChanging()
      Returns whether or not the high value of this RangeSlider is currently changing.
    • getLabelFormatter

      public final StringConverter<Number> getLabelFormatter()
      Gets the value of the property tickLabelFormatter.
      Returns:
      the value of the property tickLabelFormatter.
    • setLabelFormatter

      public final void setLabelFormatter(StringConverter<Number> value)
      Sets the value of the property tickLabelFormatter.
      Parameters:
      value -
    • labelFormatterProperty

      public final ObjectProperty<StringConverter<Number>> labelFormatterProperty()
      StringConverter used to format tick mark labels. If null a default will be used.
      See Also:
    • incrementLowValue

      public void incrementLowValue()
      Increments the low value by the block increment amount.
    • decrementLowValue

      public void decrementLowValue()
      Decrements the low value by the block increment amount.
    • incrementHighValue

      public void incrementHighValue()
      Increments the high value by the block increment amount.
    • decrementHighValue

      public void decrementHighValue()
      Decrements the high value by the block increment amount.
    • adjustLowValue

      public void adjustLowValue(double newValue)
      Adjusts lowValue to match newValue, or as closely as possible within the constraints imposed by the min and max properties. This function also takes into account snapToTicks, which is the main difference between adjustLowValue and setLowValue.
    • adjustHighValue

      public void adjustHighValue(double newValue)
      Adjusts highValue to match newValue, or as closely as possible within the constraints imposed by the min and max properties. This function also takes into account snapToTicks, which is the main difference between adjustHighValue and setHighValue.
    • setMax

      public final void setMax(double value)
      Sets the maximum value for this Slider.
      Parameters:
      value -
    • getMax

      public final double getMax()
      Returns:
      The maximum value of this slider. 100 is returned if the maximum value has never been set.
    • maxProperty

      public final DoubleProperty maxProperty()
      Returns:
      A DoubleProperty representing the maximum value of this Slider. This must be a value greater than min.
    • setMin

      public final void setMin(double value)
      Sets the minimum value for this Slider.
      Parameters:
      value -
    • getMin

      public final double getMin()
      Returns:
      the minimum value for this Slider. 0 is returned if the minimum has never been set.
    • minProperty

      public final DoubleProperty minProperty()
      See Also:
    • setSnapToTicks

      public final void setSnapToTicks(boolean value)
      Sets the value of SnapToTicks.
      Parameters:
      value -
      See Also:
    • isSnapToTicks

      public final boolean isSnapToTicks()
      Returns:
      the value of SnapToTicks.
      See Also:
    • snapToTicksProperty

      public final BooleanProperty snapToTicksProperty()
      Indicates whether the lowValueProperty() value} / highValueProperty() value} of the Slider should always be aligned with the tick marks. This is honored even if the tick marks are not shown.
      Returns:
      A BooleanProperty.
    • setMajorTickUnit

      public final void setMajorTickUnit(double value)
      Sets the unit distance between major tick marks.
      Parameters:
      value -
      See Also:
    • getMajorTickUnit

      public final double getMajorTickUnit()
      Returns:
      The unit distance between major tick marks.
      See Also:
    • majorTickUnitProperty

      public final DoubleProperty majorTickUnitProperty()
      The unit distance between major tick marks. For example, if the min is 0 and the max is 100 and the majorTickUnit is 25, then there would be 5 tick marks: one at position 0, one at position 25, one at position 50, one at position 75, and a final one at position 100.

      This value should be positive and should be a value less than the span. Out of range values are essentially the same as disabling tick marks.

      Returns:
      A DoubleProperty
    • setMinorTickCount

      public final void setMinorTickCount(int value)
      Sets the number of minor ticks to place between any two major ticks.
      Parameters:
      value -
      See Also:
    • getMinorTickCount

      public final int getMinorTickCount()
      Returns:
      The number of minor ticks to place between any two major ticks.
      See Also:
    • minorTickCountProperty

      public final IntegerProperty minorTickCountProperty()
      The number of minor ticks to place between any two major ticks. This number should be positive or zero. Out of range values will disable disable minor ticks, as will a value of zero.
      Returns:
      An InterProperty
    • setBlockIncrement

      public final void setBlockIncrement(double value)
      Sets the amount by which to adjust the slider if the track of the slider is clicked.
      Parameters:
      value -
      See Also:
    • getBlockIncrement

      public final double getBlockIncrement()
      Returns:
      The amount by which to adjust the slider if the track of the slider is clicked.
      See Also:
    • blockIncrementProperty

      public final DoubleProperty blockIncrementProperty()
      The amount by which to adjust the slider if the track of the slider is clicked. This is used when manipulating the slider position using keys. If snapToTicks is true then the nearest tick mark to the adjusted value will be used.
      Returns:
      A DoubleProperty
    • setOrientation

      public final void setOrientation(Orientation value)
      Sets the orientation of the Slider.
      Parameters:
      value -
    • getOrientation

      public final Orientation getOrientation()
      Returns:
      The orientation of the Slider. Orientation.HORIZONTAL is returned by default.
    • orientationProperty

      public final ObjectProperty<Orientation> orientationProperty()
      The orientation of the Slider can either be horizontal or vertical.
      Returns:
      An Objectproperty representing the orientation of the Slider.
    • setShowTickLabels

      public final void setShowTickLabels(boolean value)
      Sets whether labels of tick marks should be shown or not.
      Parameters:
      value -
    • isShowTickLabels

      public final boolean isShowTickLabels()
      Returns:
      whether labels of tick marks are being shown.
    • showTickLabelsProperty

      public final BooleanProperty showTickLabelsProperty()
      Indicates that the labels for tick marks should be shown. Typically a Skin implementation will only show labels if showTickMarks is also true.
      See Also:
    • setShowTickMarks

      public final void setShowTickMarks(boolean value)
      Specifies whether the Skin implementation should show tick marks.
      Parameters:
      value -
    • isShowTickMarks

      public final boolean isShowTickMarks()
      Returns:
      whether the Skin implementation should show tick marks.
    • showTickMarksProperty

      public final BooleanProperty showTickMarksProperty()
      Returns:
      A BooleanProperty that specifies whether the Skin implementation should show tick marks.
    • getClassCssMetaData

      public static List<CssMetaData<? extends Styleable,?>> getClassCssMetaData()
      Returns:
      The CssMetaData associated with this class, which may include the CssMetaData of its super classes.
    • getControlCssMetaData

      public List<CssMetaData<? extends Styleable,?>> getControlCssMetaData()
      Overrides:
      getControlCssMetaData in class Control
    • getUserAgentStylesheet

      protected final String getUserAgentStylesheet(Class<?> clazz, String fileName)
      A helper method that ensures that the resource based lookup of the user agent stylesheet only happens once. Caches the external form of the resource.
      Parameters:
      clazz - the class used for the resource lookup
      fileName - the name of the user agent stylesheet
      Returns:
      the external form of the user agent stylesheet (the path)