Java Swing How to - Create a color spinner








Question

We would like to know how to create a color spinner.

Answer

/* ww  w  .  j  av  a  2 s  . c  o  m*/
import java.awt.Color;
import java.awt.Dimension;
import java.lang.reflect.Field;

import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerListModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Main {
  public static void main(String[] argv) throws Exception {
    ColorSpinner spinner = new ColorSpinner(new String[] { "red", "green","blue" });
   spinner.setValue("blue");
  }
}
class ColorSpinner extends JSpinner {
  public ColorSpinner(String[] colorNames) {
    super();
    setModel(new SpinnerListModel(colorNames));
    setEditor(new Editor(this));
  }

  public class Editor extends JPanel implements ChangeListener {
    int preferredWidth = 30;
    int preferredHeight = 16;

    Editor(JSpinner spinner) {
      spinner.addChangeListener(this);
      setPreferredSize(new Dimension(preferredWidth, preferredHeight));
      setColor((String) spinner.getValue());
    }
    public void stateChanged(ChangeEvent evt) {
      JSpinner spinner = (JSpinner) evt.getSource();

      String value = (String) spinner.getValue();

      setColor(value);
    }

    public void setColor(String colorName) {
      try {
        Field field = Class.forName("java.awt.Color").getField(colorName);
        Color color = (Color) field.get(null);
        setBackground(color);
      } catch (Exception e) {
      }
    }
  }
}