Scrollbar

A scroll bar provides a convenient means of allowing a user to select from an range of values. A scrollbar can have either a horizontal or a vertical orientation.

The Scrollbar constructor is of the form:

Scrollbar(int orientation, int initialValue, int width, int minimum, int maximum) 

For example:

Scrollbar slider = new Scrollbar(Scrollbar. VERTICAL, 0, 1, 9, 255); 
add(slider); 

Scrollbar Example: (Run Applet)

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ScrollbarDemo extends JApplet
{
    @Override
    public void init()
    {
        this.setContentPane(new View());
    }

    public class View extends JPanel implements AdjustmentListener
    {
        private final JScrollBar horizontalSlider = new JScrollBar(JScrollBar.HORIZONTAL,
                                                                   150, // initial position
                                                                   200, // scrollbar width
                                                                   100, // range from
                                                                   500); // range to
        private final JScrollBar verticalSlider = new JScrollBar(JScrollBar.VERTICAL, 0, 5, 0, 100);
        private final JLabel message = new JLabel();

        public View()
        {
            super();
            this.setLayout(new BorderLayout());
            this.add("Center", this.message);
            this.add("North", this.horizontalSlider);
            this.add("East", this.verticalSlider);

            this.horizontalSlider.addAdjustmentListener(this);
            this.verticalSlider.addAdjustmentListener(this);
        }

        @Override
        public void adjustmentValueChanged(AdjustmentEvent e)
        {
            final Object source = e.getSource();
            if (source == this.horizontalSlider)
            {
                this.message.setText("horizontal moved to " + this.horizontalSlider.getValue());
            }
            else if (source == this.verticalSlider)
            {
                this.message.setText("vertical moved to " + this.verticalSlider.getValue());
            }
        }
    }
}

Normalising a Scrollbar's output

A ScrollBar's maximum value is equal to its maximum value, minus the cursor width. Use the code below to normalise a scrollBar, so that it produces values in the range between the minimum and maximum.

Scrollbar_Normalised_Demo Example: (Run Applet)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Scrollbar_Normalised_Demo extends JApplet
{
    @Override
    public void init()
    {
        this.setContentPane(new View());
    }

    public class View extends JPanel implements AdjustmentListener
    {
        private final int start = 0;
        private final int scrollBarWidth = 10;
        private final int rangeStart = 0;
        private final int rangeEnd = 100;
        private final JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL, start, scrollBarWidth, rangeStart, rangeEnd);
        private final NormalisedScrollBar normalisedScrollBar = new NormalisedScrollBar(JScrollBar.HORIZONTAL, start, scrollBarWidth, rangeStart, rangeEnd);
        private final JLabel message = new JLabel();

        public View()
        {
            super();

            this.setLayout(new BorderLayout());
            this.add("Center", this.message);
            this.add("North", this.scrollBar);
            this.add("South", this.normalisedScrollBar);

            this.scrollBar.addAdjustmentListener(this);
            this.normalisedScrollBar.addAdjustmentListener(this);
        }

        @Override
        public void adjustmentValueChanged(AdjustmentEvent e)
        {
            final Object source = e.getSource();
            if (source == this.scrollBar)
            {
                this.message.setText("horizontal moved to " + this.scrollBar.getValue());
            }
            else
            {
                this.message.setText("horizontal moved to " + this.normalisedScrollBar.getValue());
            }
        }
    }

    public class NormalisedScrollBar extends JScrollBar
    {
        public NormalisedScrollBar(int orientation, int value, int visible, int minimum, int maximum)
        {
            super(orientation, value, visible, minimum, maximum);
        }

        @Override
        public int getValue()
        {
            // Normalise the scrollBar range to account for the width of the scrollBar

            // Get the width of the scrollbar cursor
            final int ScrollBarCursorWidth = getVisibleAmount();
            final int rangeStart = getMinimum();
            final int rangeEnd = getMaximum();

            int normalisedValue;
            // shift the start point to 0
            normalisedValue = super.getValue() - rangeStart;

            // normalise within the range of rangeStart to rangeEnd
            normalisedValue = normalisedValue * (rangeEnd - rangeStart) / (rangeEnd - (rangeStart + ScrollBarCursorWidth));

            // move the start point back to  rangeStart
            normalisedValue = normalisedValue + rangeStart;
            return normalisedValue;
        }
    }
}
 
<div align="center"><a href="../versionC/index.html" title="DKIT Lecture notes homepage for Derek O&#39; Reilly, Dundalk Institute of Technology (DKIT), Dundalk, County Louth, Ireland. Copyright Derek O&#39; Reilly, DKIT." target="_parent" style='font-size:0;color:white;background-color:white'>&nbsp;</a></div>