Java Swing How to - Create Custom Cycling Spinner Model








Question

We would like to know how to create Custom Cycling Spinner Model.

Answer

    /*from   www . j a v  a 2  s .  c  o  m*/
/*
 *
 * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
 * modify and redistribute this software in source and binary code form,
 * provided that i) this copyright notice and license appear on all copies of
 * the software; and ii) Licensee does not utilize the software in a manner
 * which is disparaging to Sun.
 *
 * This software is provided "AS IS," without a warranty of any kind. ALL
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
 * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
 * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
 * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
 * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
 * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
 * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 *
 * This software is not designed or intended for use in on-line control of
 * aircraft, air traffic, aircraft navigation or aircraft communications; or in
 * the design, construction, operation or maintenance of any nuclear
 * facility. Licensee represents and warrants that it will not use or
 * redistribute the Software for such purposes.
 */    
    
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerModel;

class CyclingSpinnerListModel extends SpinnerListModel {
  Object firstValue, lastValue;

  SpinnerModel linkedModel = null;

  public CyclingSpinnerListModel(Object[] values) {
    super(values);
    firstValue = values[0];
    lastValue = values[values.length - 1];
  }

  public void setLinkedModel(SpinnerModel linkedModel) {
    this.linkedModel = linkedModel;
  }

  public Object getNextValue() {
    Object value = super.getNextValue();
    if (value == null) {
      value = firstValue;
      if (linkedModel != null) {
        linkedModel.setValue(linkedModel.getNextValue());
      }
    }
    return value;
  }

  public Object getPreviousValue() {
    Object value = super.getPreviousValue();
    if (value == null) {
      value = lastValue;
      if (linkedModel != null) {
        linkedModel.setValue(linkedModel.getPreviousValue());
      }
    }
    return value;
  }
}

public class Main {

  public static void main(String[] a) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JSpinner spinner = new JSpinner(new CyclingSpinnerListModel(new String[]{"A","B","C"}));
    frame.add(spinner);

    frame.setSize(300, 200);
    frame.setVisible(true);
  }

}