Scrollbar Events in JDK 1.0.x

Uses of a Scrollbar

  • As a slider
  • As a way of scrolling a window

Scrollbar Events

  SCROLL_LINE_UP Scrolled a "line" up
  SCROLL_LINE_DOWN Scrolled a "line" down
  SCROLL_PAGE_UP Scrolled a "page" up
  SCROLL_PAGE_DOWN Scrolled a "page" down
  SCROLL_ABSOLUTE Scrolled to an absolute position

Using a Scrollbar as a Slider

package Slider;
import java.awt.Frame;
import java.awt.Canvas;
import java.awt.Label;
import java.awt.Scrollbar;
import java.awt.TextField;
import java.awt.Event;
import java.awt.Panel;
import java.awt.GridLayout;
import java.awt.Color;

public class Slider extends Frame
{
    public static void main(String[] args)
    {
       Frame f = new Slider();
       f.resize(300, 200);
       f.show();
    }

    public Slider()
    {
        setTitle("Slider Example");
        Panel p = new Panel(new GridLayout(3, 3));
        p.add(m_redCanvas);
        m_redCanvas.setBackground(Color.red);
        p.add(m_redText);
        p.add(m_redScroll);
        m_redScroll.setPageIncrement(16);
        p.add(m_greenCanvas);
        m_greenCanvas.setBackground(Color.green);
        p.add(m_greenText);
        p.add(m_greenScroll);
        m_greenScroll.setPageIncrement(16);
        p.add(m_blueCanvas);
        m_blueCanvas.setBackground(Color.blue);
        p.add(m_blueText);
        p.add(m_blueScroll);
        m_blueScroll.setPageIncrement(16);
        add("South", p);
        m_targetCanvas.setBackground(new Color(0, 0, 0));
        add("Center", m_targetCanvas);
    }

    public boolean handleEvent(Event evt)
    {
        if (evt.id == Event.WINDOW_DESTROY)
           System.exit(0);
        else if (evt.id == Event.LOST_FOCUS)
        {
           int value;
           if (evt.target == m_redText)
           {
              value = Integer.parseInt(m_redText.getText());
              m_redScroll.setValue(value);
           }
           else if (evt.target == m_greenText)
           {
              value = Integer.parseInt(m_greenText.getText());
              m_greenScroll.setValue(value);
           }
           else if (evt.target == m_blueText)
           {
              value = Integer.parseInt(m_blueText.getText());
              m_blueScroll.setValue(value);
           }
        }
        else if (evt.id == Event.SCROLL_ABSOLUTE
              || evt.id == Event.SCROLL_LINE_DOWN
              || evt.id == Event.SCROLL_LINE_UP
              || evt.id == Event.SCROLL_PAGE_DOWN
              || evt.id == Event.SCROLL_PAGE_UP
              )
        {
           int red = m_redScroll.getValue();
           int green = m_greenScroll.getValue();
           int blue = m_blueScroll.getValue();
           m_redText.setText("" + red);
           m_greenText.setText("" + green);
           m_blueText.setText("" + blue);
           m_targetCanvas.setBackground(new Color(red, green, blue));
           m_targetCanvas.repaint();
           return true;
        }
        return super.handleEvent(evt);
    }

    //////////// Data //////////////
    private Canvas m_redCanvas   = new Canvas();
    private Canvas m_greenCanvas = new Canvas();
    private Canvas m_blueCanvas  = new Canvas();

    private TextField m_redText   = new TextField("0");
    private TextField m_greenText = new TextField("0");
    private TextField m_blueText  = new TextField("0");

    private Scrollbar m_redScroll
            = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 255);
    private Scrollbar m_greenScroll
            = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 255);
    private Scrollbar m_blueScroll
            = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 255);

    private Canvas m_targetCanvas = new Canvas();
}

Using a Scrollbar to Scroll a Window

Beware! The scrolling behavior is quite flaky!

package Scroller;
import java.awt.Scrollbar;
import java.awt.Canvas;
import java.awt.Frame;
import java.awt.Event;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Label;
import java.awt.Color;

public class Scroller extends Frame
{
   public static void main(String[] args)
   {
      Frame f = new Scroller();
      f.resize(300, 200);
      f.show();
   }

   public Scroller()
   {
      setTitle("Scroller Example");
      add("North", m_position);
      m_position.setBackground(Color.lightGray);
      add("East", m_verScroll);
      add("South", m_horScroll);
      add("Center", m_canvas);
   }

   public void show()
   {
      super.show();
      reScale(0, 0);
      reportPosition();
   }

   public boolean handleEvent(Event evt)
   {
      if (evt.id == Event.WINDOW_DESTROY)
         System.exit(0);
      else if (evt.id == Event.WINDOW_MOVED
            || evt.id == Event.WINDOW_EXPOSE
            )
      {
         reScale(m_horScroll.getValue(),
                 m_verScroll.getValue());
         reportPosition();
      }
      else if (evt.id == Event.SCROLL_ABSOLUTE
            || evt.id == Event.SCROLL_LINE_DOWN
            || evt.id == Event.SCROLL_LINE_UP
            || evt.id == Event.SCROLL_PAGE_DOWN
            || evt.id == Event.SCROLL_PAGE_UP
            )
      {
         m_canvas.translate(m_horScroll.getValue(),
                            m_verScroll.getValue());
         reportPosition();
         return true;
      }
      return super.handleEvent(evt);
   }

   private void reScale(int x, int y)
   {
      Dimension d = m_canvas.size();
      m_horScroll.setValues(x, d.width, 0, m_canvas.WIDTH);
      m_horScroll.setVisible(d.width < m_canvas.WIDTH);
      m_verScroll.setValues(y, d.height, 0, m_canvas.HEIGHT);
      m_verScroll.setVisible(d.height < m_canvas.HEIGHT);
   }

   private void reportPosition()
   {
      int hMax = m_horScroll.getMaximum();
      int vMax = m_verScroll.getMaximum();
      int hVis = m_horScroll.getVisible();
      int vVis = m_verScroll.getVisible();
      int hPos = m_horScroll.getValue();
      int vPos = m_verScroll.getValue();
      m_position.setText("Max = [" + hMax + "," + vMax +
                         "] Visible = [" + hVis + "," + vVis +
                         "] Position = [" +
                         hPos + "," + vPos + "]");
   }

   /////////// Data ///////////
   private Label m_position = new Label("");
   private Scrollbar m_verScroll
                     = new Scrollbar(Scrollbar.VERTICAL);
   private Scrollbar m_horScroll
                     = new Scrollbar(Scrollbar.HORIZONTAL);
   private CanvasOfSquares m_canvas = new CanvasOfSquares();
}

class CanvasOfSquares extends Canvas
{
   public static final int HEIGHT = 400;
   public static final int WIDTH = 600;

   public CanvasOfSquares()
   {
      for (int i = 0; i < m_square.length; i++)
      {
         int x = (int)(Math.random() * WIDTH);
         int y = (int)(Math.random() * HEIGHT);
         m_square[i] = new Point(x, y);
      }
   }

   public void translate(int x, int y)
   {
      m_dx = x;
      m_dy = y;
      repaint();
   }

   public void paint(Graphics g)
   {
      g.translate(-m_dx, -m_dy);
      for (int i = 0; i < m_square.length; i++)
          draw(g, i);
   }

   public void draw(Graphics g, int i)
   {
      g.drawRect(m_square[i].x, m_square[i].y,
                 SQUARESIZE, SQUARESIZE);
   }

   /////////////// Data ///////////////
   private static final int SQUARESIZE = 10;
   private static final int MAXSQUARECOUNT = 100;

   private int m_dx = 0;
   private int m_dy = 0;
   private int m_squareCount = 0;
   private Point[] m_square = new Point[MAXSQUARECOUNT];
   private int m_current = -1;
}

This page was last modified on 02 October, 2007