Home » Desktop Java » swing » JScrollPane » Handle scrollbar value changes in JScrollPane

About Ilias Tsagklis

Ilias Tsagklis
Ilias is a software developer turned online entrepreneur. He is co-founder and Executive Editor at Java Code Geeks.

Handle scrollbar value changes in JScrollPane

In this example we are going to see how to handle scroll bar value changes in a JScrollPane component. You can use this when you want to know exactly what portion of the screen the user is examining. Additionally you can use this to create some very interesting UIs. For example you can change the application behavior according to the scroll bar value.

Basically, in order to handle scroll bar value changes in a JScrollPane, one should follows these steps:

  • Create a new JFrame.
  • Use frame.getContentPane().setLayout(new FlowLayout()) to set flow layout for the frame.
  • Create a new JTextArea.
  • Create a new JScrollPane that contains the above text area.
  • Use setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS) and setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) to set vertical and horizontal scroll bars.
  • Create a class that implements AdjustmentListener interface.
  • Override adjustmentValueChanged. Now every time the user moves the scroll bar this method will fire up.

Let’s see the code:

package com.javacodegeeks.snippets.desktop;

import java.awt.Adjustable;
import java.awt.FlowLayout;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class HandleScrollbarValueChangesInJScrollPane {

	private static final long serialVersionUID = 1L;

	private static void createAndShowGUI() {

		// Create and set up the window.
		final JFrame frame = new JFrame("Scroll Pane Example");

		// Display the window.
		frame.setSize(200, 200);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// set flow layout for the frame
		frame.getContentPane().setLayout(new FlowLayout());

		JTextArea textArea = new JTextArea(5, 5);
		JScrollPane scrollableTextArea = new JScrollPane(textArea);

		scrollableTextArea.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		scrollableTextArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

		CustomAdjustmentListener adjustmentListener = new CustomAdjustmentListener();

		scrollableTextArea.getHorizontalScrollBar().addAdjustmentListener(adjustmentListener);
		scrollableTextArea.getVerticalScrollBar().addAdjustmentListener(adjustmentListener);

		frame.getContentPane().add(scrollableTextArea);

	}

	static class CustomAdjustmentListener implements AdjustmentListener {

		@Override
		public void adjustmentValueChanged(AdjustmentEvent evt) {

			Adjustable source = evt.getAdjustable();

  // check if user is currently dragging the scrollbar's knob

  if (evt.getValueIsAdjusting()) {

return;

  }

  // get the orientation of the adjustable object

  int orient = source.getOrientation();

  if (orient == Adjustable.HORIZONTAL) {

  	System.out.println("Event from horizontal scrollbar");

  }

  else {

  	System.out.println("Event from vertical scrollbar");

  }

  // get the type of adjustment which caused the value changed event

  int type = evt.getAdjustmentType();

  switch (type) {

    case AdjustmentEvent.UNIT_INCREMENT:

  	  System.out.println("increased by one unit");

  break;

    case AdjustmentEvent.UNIT_DECREMENT:

  	  System.out.println("decreased by one unit");

  break;

    case AdjustmentEvent.BLOCK_INCREMENT:

  	  System.out.println("increased by one block");

  break;

    case AdjustmentEvent.BLOCK_DECREMENT:

  	  System.out.println("decreased by one block");

  break;

    case AdjustmentEvent.TRACK:

  	  System.out.println("knob on the scrollbar was dragged");

  break;

  }

			// get the current value in the adjustment event
			int value = evt.getValue();
			System.out.println("Current Value: " + value);

		}
	}

	public static void main(String[] args) {

  //Schedule a job for the event-dispatching thread:

  //creating and showing this application's GUI.

  javax.swing.SwingUtilities.invokeLater(new Runnable() {

public void run() {

    createAndShowGUI(); 

}

  });
    }

}

 
This was an example on how to handle scroll bar value changes in JScrollPane component.

(No Ratings Yet)
Start the discussion Views Tweet it!

Do you want to know how to develop your skillset to become a Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you our best selling eBooks for FREE!

 

1. JPA Mini Book

2. JVM Troubleshooting Guide

3. JUnit Tutorial for Unit Testing

4. Java Annotations Tutorial

5. Java Interview Questions

6. Spring Interview Questions

7. Android UI Design

 

and many more ....

 

Receive Java & Developer job alerts in your Area

 

Leave a Reply

avatar
  Subscribe  
Notify of