Spinners

You might be wondering just what a spinner is. It’s a new 1.4 component similar to the JComboBox, but it shows only one item. It includes up and down arrows to “scroll” through its set of values. A JFormattedTextField is used to edit and render those values. Spinners are quite flexible. They work nicely with a set of choices (such as the months of the year) as well as with unbounded ranges such as a set of integers.

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

class RolloverSpinnerListModel extends SpinnerListModel {

	public RolloverSpinnerListModel(Object[] items) {
		super(items);
	}

	public RolloverSpinnerListModel(List items) {
		super(items);
	}

	public Object getNextValue() {
		Object nv = super.getNextValue();
		if (nv != null) {
			return nv;
		}
		return getList().get(0);
	}

	public Object getPreviousValue() {
		Object pv = super.getPreviousValue();
		if (pv != null) {
			return pv;
		}
		List l = getList();
		return l.get(l.size() - 1);
	}
}

public class SpinnerTest extends JFrame {

	public SpinnerTest() {
		super("JSpinner Test");
		setSize(300, 180);
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		Container c = getContentPane();
		c.setLayout(new GridLayout(0, 2));

		c.add(new JLabel(" Basic Spinner"));
		c.add(new JSpinner());

		c.add(new JLabel(" Date Spinner"));
		c.add(new JSpinner(new SpinnerDateModel()));

		String weekdays[] = new String[] { "Sunday", "Monday", "Tuesday",
				"Wednesday", "Thursday", "Friday", "Saturday" };
		c.add(new JLabel(" List Spinner"));
		c.add(new JSpinner(new SpinnerListModel(weekdays)));

		c.add(new JLabel(" Number Spinner"));
		c.add(new JSpinner(new SpinnerNumberModel(0, 0, 100, 5)));

		c.add(new JLabel(" Rollover List Spinner"));
		c.add(new JSpinner(new RolloverSpinnerListModel(weekdays)));

		setVisible(true);
	}

	public static void main(String args[]) {
		new SpinnerTest();
	}
}