/**
   * Moves the selected thumb in the specified direction by a unit increment. This method is called
   * when the user presses one of the arrow keys.
   */
  @Override
  public void scrollByUnit(int direction) {
    synchronized (slider) {
      int delta = 1 * ((direction > 0) ? POSITIVE_SCROLL : NEGATIVE_SCROLL);

      if (upperThumbSelected) {
        int oldValue = ((RangeSlider) slider).getUpperValue();
        ((RangeSlider) slider).setUpperValue(oldValue + delta);
      } else {
        int oldValue = slider.getValue();
        slider.setValue(oldValue + delta);
      }
    }
  }
  public void display() {
    // Initialize values.
    rangeSlider.setValue(3);
    rangeSlider.setUpperValue(7);

    // Initialize value display.
    rangeSliderValue1.setText(String.valueOf(rangeSlider.getValue()));
    rangeSliderValue2.setText(String.valueOf(rangeSlider.getUpperValue()));

    // Create window frame.
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setTitle("Range Slider Demo");

    // Set window content and validate.
    frame.getContentPane().setLayout(new BorderLayout());
    frame.getContentPane().add(this, BorderLayout.CENTER);
    frame.pack();

    // Set window location and display.
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
  /**
   * Moves the selected thumb in the specified direction by a block increment. This method is called
   * when the user presses the Page Up or Down keys.
   */
  @Override
  public void scrollByBlock(int direction) {
    synchronized (slider) {
      int blockIncrement = (slider.getMaximum() - slider.getMinimum()) / 10;
      if (blockIncrement <= 0 && slider.getMaximum() > slider.getMinimum()) {
        blockIncrement = 1;
      }
      int delta = blockIncrement * ((direction > 0) ? POSITIVE_SCROLL : NEGATIVE_SCROLL);

      if (upperThumbSelected) {
        int oldValue = ((RangeSlider) slider).getUpperValue();
        ((RangeSlider) slider).setUpperValue(oldValue + delta);
      } else {
        int oldValue = slider.getValue();
        slider.setValue(oldValue + delta);
      }
    }
  }
  public RangeSliderDemo() {
    setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
    setLayout(new GridBagLayout());

    rangeSliderLabel1.setText("Lower value:");
    rangeSliderLabel2.setText("Upper value:");
    rangeSliderValue1.setHorizontalAlignment(JLabel.LEFT);
    rangeSliderValue2.setHorizontalAlignment(JLabel.LEFT);

    rangeSlider.setPreferredSize(new Dimension(240, rangeSlider.getPreferredSize().height));
    rangeSlider.setMinimum(0);
    rangeSlider.setMaximum(10);

    // Add listener to update display.
    rangeSlider.addChangeListener(
        new ChangeListener() {
          public void stateChanged(ChangeEvent e) {
            RangeSlider slider = (RangeSlider) e.getSource();
            rangeSliderValue1.setText(String.valueOf(slider.getValue()));
            rangeSliderValue2.setText(String.valueOf(slider.getUpperValue()));
          }
        });

    add(
        rangeSliderLabel1,
        new GridBagConstraints(
            0,
            0,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.NONE,
            new Insets(0, 0, 3, 3),
            0,
            0));
    add(
        rangeSliderValue1,
        new GridBagConstraints(
            1,
            0,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.NONE,
            new Insets(0, 0, 3, 0),
            0,
            0));
    add(
        rangeSliderLabel2,
        new GridBagConstraints(
            0,
            1,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.NONE,
            new Insets(0, 0, 3, 3),
            0,
            0));
    add(
        rangeSliderValue2,
        new GridBagConstraints(
            1,
            1,
            1,
            1,
            0.0,
            0.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.NONE,
            new Insets(0, 0, 6, 0),
            0,
            0));
    add(
        rangeSlider,
        new GridBagConstraints(
            0,
            2,
            2,
            1,
            0.0,
            0.0,
            GridBagConstraints.NORTHWEST,
            GridBagConstraints.NONE,
            new Insets(0, 0, 0, 0),
            0,
            0));
  }