Spinner Editors

You probably noticed that the JSpinner class also includes several inner classes. These inner classes provide basic editors (and renderers) for spinners for each of the major model types. While you’ll typically rely on the editor picked by your spinner when you create it, you can override that decision if you like. Here’s a simple example of a modified DateEditor. This spinner displays an mm/yy date, and the step size is one month.

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

public class MonthSpinner extends JFrame {

	public MonthSpinner() {
		super("Month Spinner");
		setSize(200, 100);
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		Container c = getContentPane();
		c.setLayout(new FlowLayout(FlowLayout.LEFT, 4, 4));

		c.add(new JLabel("Expiration Date:"));
		Date today = new Date();
		// Start the spinner today, but don't set a min or max date.
		// The increment should be a month.
		JSpinner s = new JSpinner(new SpinnerDateModel(today, null, null,
				Calendar.MONTH));
		JSpinner.DateEditor de = new JSpinner.DateEditor(s, "MM/yy");
		s.setEditor(de);
		c.add(s);

		setVisible(true);
	}

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