package com.mindprod.example;

import com.mindprod.common11.FontFactory;

import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;

/**
 * demonstrate the use of javax.swing.JSpinner
 * <p/>
 * composed with IntelliJ IDEA
 *
 * @author Roedy Green, Canadian Mind Products
 * @version 1.0
 */
public final class TestJSpinner
    {
    // --------------------------- main() method ---------------------------

    /**
     * Debugging harness for a Frame
     *
     * @param args command line arguments are ignored.
     */
    public static void main( String args[] )
        {
        SwingUtilities.invokeLater( new Runnable()
        {
        /**
         * fire up a JFrame on the Swing thread
         */
        public void run()
            {
            final JFrame jFrame = new JFrame();
            final Container contentPane = jFrame.getContentPane();
            final JSpinner sizeSpinner = new JSpinner();
            sizeSpinner.setBackground( Color.BLACK );
            sizeSpinner.setForeground( Color.YELLOW );
            sizeSpinner.setFont( FontFactory.build( "Dialog", Font.BOLD, 15 ) );
            sizeSpinner.setEnabled( true );

            // how much space you want to freeze the spinner at.
            Dimension d = new Dimension( 40, 25 );
            sizeSpinner.setMinimumSize( d );
            sizeSpinner.setPreferredSize( d );
            sizeSpinner.setMaximumSize( d );

            final SpinnerNumberModel sizeSpinnerModel =
                    new SpinnerNumberModel( /* initial value */ 18,
                            /* min */ 8,
                            /* max */ 72,
                            /* step */ 1 );
            sizeSpinner.setModel( sizeSpinnerModel );

            sizeSpinner.addChangeListener( new ChangeListener()
            {
            /**
             * Invoked when the JSpinner changes, even one notch in
             * moving to another value
             *
             * @param e a ChangeEvent object
             */
            public void stateChanged( ChangeEvent e )
                {
                // do something when user changes the value.
                float setting =
                        ( ( Number ) ( sizeSpinnerModel.getValue() ) )
                                .floatValue();
                System.out.println( setting );
                }
            } );

            contentPane.add( sizeSpinner );
            jFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
            jFrame.pack();
            jFrame.setVisible( true );
            }
        } );
        }// end main
    }