/Users/petercappello/NetBeansProjects/56-2014/util/src/BoundedIntegerOptionPane.java

/*
 * Option pane that accepts only strings that have an interpretation as an int
 * that is within specified lower & upper bounds.
 */
import javax.swing.JOptionPane;

/**
 *
 * @author petercappello
 */
public class BoundedIntegerOptionPane extends IntegerOptionPane
{
    private final int lowerBound;
    private final int upperBound;
    
    /**
      Constructs an IntegerOptionPane object that used promptString as the user prompt.
     * @param promptString prompt string used in option pane.
     * @param lowerBound entered integer must be greater than or equal to lowerBound.
     * @param upperBound entered integer must be less than or equal to upperBound.
     */
    public BoundedIntegerOptionPane( String promptString, int lowerBound, int upperBound ) 
    {
        super( promptString );
        this.lowerBound = lowerBound;
        this.upperBound = upperBound;
    }
    
    /**
     * Get the value as an integer of an entered String, ensuring it is within
     * lower and upper bounds.
     * @return value as an integer of entered String.
     */
    @Override
    public int getIntValue()
    {
        int value;
        while ( true )
        {
            value = super.getIntValue();
            if ( value < lowerBound )
            {
                StringBuilder errorString = new StringBuilder();
                errorString.append( "Entered value " ).append( value );
                errorString.append( " < " ).append( lowerBound );
                errorString.append( " lower bound " );
                JOptionPane.showMessageDialog( null, errorString, "Less Than Lower Bound", JOptionPane.ERROR_MESSAGE  );
            }
            else if ( upperBound < value )
            {
                StringBuilder errorString = new StringBuilder();
                errorString.append( "Upper bound " ).append( upperBound );
                errorString.append( " < " ).append( value );
                errorString.append( " entered value " );
                JOptionPane.showMessageDialog( null, errorString, "Exceeded Upper Bound", JOptionPane.ERROR_MESSAGE );
            }
            else
            {
                break;
            }
        }
        return value;
    }
    
    /**
     * construct a string version of the object.
     * @return string: the prompt string, lower bound, and upper bound.
     */
    @Override
    public String toString()
    {
        StringBuilder string = new StringBuilder();
        string.append( super.toString() );
        string.append( "\nlowerBound: " ).append( lowerBound );
        string.append( "\nupperBound: " ).append( upperBound );
        return new String( string );
    }
    
    /**
     * Unit test the BoundedIntegerOptionPane class.
     * @param args unused
     */
    public static void main( String[] args )
    {
        String prompt = "Enter an int i such that 0 <= i <= 10";
        BoundedIntegerOptionPane boundedIntegerOptionPane = new BoundedIntegerOptionPane( prompt, 0, 10 );
        System.out.println( boundedIntegerOptionPane );        
        System.out.println( boundedIntegerOptionPane.getIntValue() );

    }
}