Using the Scrollbar graphical control

 

The Scrollbar class 

Object

\

Component

 

\

Scrollbar

  1. Implementing the AdjustmentListener interface

  2. Registering an AdjustmentListener by calling the scrollbar's addAdjustmentListener() method

  3. Coding an adjustmentValueChanged() method within the registered AdjustmentListener that defines the processing to be performed 

When the user moves the thumb, an AdjustmentEvent will be fired to the adjustmentValueChanged() method of the registered AdjustmentListener for processing.

Scrollbar myBar = new Scrollbar(Scrollbar.VERTICAL,15,10,1,100); 

which creates a vertical scrollbar with an initial value of 15, a thumb width of 10, a minimum value of 1, and a stated maximum value of 100. The actual maximum value is 90 (stated maximum value - thumb width).

The block increment (how far to move the thumb when the user clicks on either side of it within the scrollbar) defaults to 10.

Field

Usage

HORIZONTAL

Indicates a horizontal scrollbar

VERTICAL

Indicates a vertical scrollbar

Method

Usage

addAdjustmentListener()

Adds the specified AdjustmentListener to receive AdjustmentEvent objects from this scrollbar

getBlockIncrement()

Gets the block increment of this scrollbar

getMaximum()

Gets the maximum value of this scrollbar

getMinimum()

Gets the minimum value of this scrollbar

getValue()

Gets the current value (thumb position) of this scrollbar

getVisibleAmount()

Gets the current visible amount (thumb size) of this scrollbar

removeAdjustmentListener()

Removes the specified AdjustmentListener so it no longer receives AdjustmentEvent objects from this scrollbar

setBlockIncrement()

Sets the block increment of this scrollbar

setMaximum()

Sets the maximum value of this scrollbar

setMinimum()

Sets the minimum value of this scrollbar

setValue()

Sets the current value (thumb position) of this scrollbar

setVisibleAmount()

Sets the current visible amount (thumb size) of this scrollbar

Consult the help facility of your Java development environment or the Java API for more details.

Example:

import java.awt.*;
import java.awt.event.*;

public class App extends Frame
  implements WindowListener, AdjustmentListener {

  class Bubble extends Canvas {
    private int width;
    private int height;
    public Bubble(int iWidth, int iHeight) {
      width = iWidth;
      height = iHeight;
    }
    public void setWidth(int newWidth) {
      width = newWidth;
    }
    public void setHeight(int newHeight) {
      height = newHeight;
    }
    public void paint(Graphics g) {
      g.setColor(Color.pink);
      g.fillOval(0,0,width,height);
    }
  }

  Bubble bubble;
  Scrollbar wBar;
  Scrollbar hBar;
  Label size;

  public static void main(String[] args) {
    App myWindow = new App("Stretch the bubble");
    myWindow.setSize(330,370);
    myWindow.setVisible(true);
  }

  public App(String title) {
    super(title);
    setLayout(new BorderLayout());
    addWindowListener(this);
    int sWidth = 50;
    int sHeight = 150;
    bubble = new Bubble(sWidth,sHeight);
    bubble.setBackground(Color.white);
    add(bubble);
    wBar = new Scrollbar(Scrollbar.HORIZONTAL,sWidth,20,1,320);
    wBar.setBlockIncrement(wBar.getVisibleAmount());
    wBar.addAdjustmentListener(this);
    add(wBar, BorderLayout.NORTH);
    hBar = new Scrollbar(Scrollbar.VERTICAL,sHeight,20,1,320);
    hBar.setBlockIncrement(hBar.getVisibleAmount());
    hBar.addAdjustmentListener(this);
    add(hBar, BorderLayout.EAST);
    size = new Label("width = " + sWidth + ", height = " + sHeight);
    size.setBackground(Color.lightGray);
    size.setAlignment(Label.CENTER);
    add(size,BorderLayout.SOUTH);
  }

  public void adjustmentValueChanged(AdjustmentEvent e) {
    if (e.getSource().equals(wBar)) {
      bubble.setWidth(wBar.getValue());
    }
    if (e.getSource().equals(hBar)) {
      bubble.setHeight(hBar.getValue());
    }
    bubble.repaint();
    size.setText("width = " + wBar.getValue() +
      ", height = " + hBar.getValue());
  }

  public void windowClosing(WindowEvent e) {
    dispose();
    System.exit(0);
  }

  public void windowOpened(WindowEvent e) {}
  public void windowActivated(WindowEvent e) {}
  public void windowIconified(WindowEvent e) {}
  public void windowDeiconified(WindowEvent e) {}
  public void windowDeactivated(WindowEvent e) {}
  public void windowClosed(WindowEvent e) {}
}

Notes:

  1. The class implements the AdjustmentListener interface in order to become a registered AdjustmentListener

  2. Inner class Bubble extends Canvas to render a filled, pink oval of a certain width and height. Its constructor receives the bubble's initial width and height as parameters. The setWidth() and setHeight() methods can be called to change the bubble's width and height respectively. The paint() method overrides the inherited paint() method of the Component class to draw the bubble in the current width and height whenever it needs to be rendered.

  3. The application class has instance variables for referencing a Bubble object (bubble), scrollbars for changing the bubble's width and height (wBar and hBar), and a label (size) for displaying the current bubble size.

  4. In the application's constructor, the bubble is instantiated and added to the CENTER of the application frame. The width scrollbar (wBar) is then instantiated, its block increment is set to be the same as its "thumb" size, its AdjustmentListener registered, and it is added to the NORTH region of the application frame. This is followed by the instantiation of the height scrollbar (hBar), the setting of its block increment, the registering of its AdjustmentListener registered, and adding it to the EAST region of the application frame. Finally, the size label is instantiated to display the initial width and height of the bubble and added to the SOUTH of the application frame.

  5. The adjustmentValueChanged() method is required by the AdjustmentListener interface. It receives an AdjustmentEvent object as a parameter and is automatically called when the user moves the thumb within a scrollbar. In this sample, the method determines which scrollbar was adjusted. If the user adjusted wBar, the current value of wBar is passed to the bubble's setWidth() method. If the user adjusted hBar, the current value of hBar is passed to the bubble's setHeight() method. In either case, the bubble is repainted and the size label's text changed to indicate the bubble's new width and height.

 

Lab exercise for Ferris students

E-mail your answers to this assignment no later than the due date listed in the class schedule.

 

Review questions

  1. A scrollbar is instantiated as follows. Which of the statements below will be true of the scrollbar?  (choose two)

new Scrollbar(Scrollbar.HORIZONTAL,25,20,15,275)

  1. the maximum value returned by its getValue() method will be 255

  1. the maximum value returned by its getValue() method will be 275

  2. it would display better in the NORTH or SOUTH of a frame having a BorderLayout than in the frame's EAST or WEST

  3. it would display better in the EAST or WEST of a frame having a BorderLayout than in the frame's NORTH or SOUTH

  4. it would display equally well in any location of a frame having a BorderLayout

  1. What kind of event or events can be fired by a Scrollbar obect?

  1. ActionEvent only

  1. ActionEvent and AdjustmentEvent

  2. AdjustmentEvent only

  3. WindowEvent and AdjustmentEvent

  4. ActionEvent, WindowEvent, and AdjustmentEvent

  1. Code the method header of a method to process a scrollbar event.

  1. Assuming that all unseen code is correct and that line numbers are for reference purposes only, what will result from an attempt to compile and execute the following code?

1
2
Scrollbar x = new Scrollbar(VERTICAL,10,20,1,50);
x.setMinimum(x.getValue());
  1. a compile error will occur at line 1

  2. a compile error will occur at line 2

  3. a runtime error will occur

  4. a vertical scrollbar with a minimum value of 1

  5. a vertical scrollbar with a minimum value of 10