// State picking with a slider.
//
// CS 310, Spring 2008

import javax.swing.JSlider;
import javax.swing.JApplet;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.util.Dictionary;
import java.util.Hashtable;
import java.awt.Component;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;

// <applet 
//    code = "stateslider" archive = "swingc.jar" height = 60 width = 250>
// </applet>

public class 
stateslider
extends JApplet {

  @Override
  public void 
  init() {
    final JPanel panel = new JPanel();
    add(panel);

    final JLabel stateLabel = new JLabel(StateNames.stateNames[24]);
    panel.add(stateLabel);

    final JSlider slider = new JSlider(0, 49, 24);
    slider.setPaintLabels(true);

    final Dictionary<Integer, Component> labelTable =
	new Hashtable<Integer, Component>();
    labelTable.put(0, new JLabel("AL"));
    labelTable.put(10, new JLabel("HA"));
    labelTable.put(20, new JLabel("MA"));
    labelTable.put(30, new JLabel("NM"));
    labelTable.put(40, new JLabel("SD"));
    labelTable.put(49, new JLabel("WY"));
    slider.setLabelTable(labelTable);
		   
    slider.addChangeListener(
      new ChangeListener() {
	public void
	stateChanged(ChangeEvent e) {
	  JSlider slider = (JSlider) e.getSource();

	  // The padding spaces are a hack to make sure the label's large
	  // enough to get a line of its own.

	  stateLabel.setText(
            "   " + StateNames.stateNames[slider.getValue()] + "   ");
	  }
	});

    panel.add(slider);
    }
  }

syntax highlighted by Code2HTML, v. 0.9.1