/** * IntegerField provides a range-checked data entry area for integers.<p> * * Copyright &copy; 1998-89 Martin Minow. All Rights Reserved.<p> * * Permission to use, copy, modify, and redistribute this software and its * documentation for personal, non-commercial use is hereby granted provided that * this copyright notice and appropriate documentation appears in all copies. This * software may not be distributed for fee or as part of commercial, "shareware," * and/or not-for-profit endevors including, but not limited to, CD-ROM collections, * online databases, and subscription services without specific license.<p> * * Based on DateGUI.java in Mastering JavaBeans. * @see <a href="http://www.sybase.com">Sybase</a>, click on *	"Catalog>Updates>Mastering JavaBeans". * @author <a href="mailto:minow@pobox.com">Martin Minow</a> * @version 1.0a0 * Set tabs every 4 characters. * * Bugs: This should probably be in a utility path, rather than in * the astro bean path. * */package org.minow.applets.sunsphere;import java.beans.*;import java.util.*;import java.awt.*;import java.awt.event.*;import java.text.*;public class IntegerField extends TextField		implements TextListener{    private Toolkit		toolkit;    private NumberFormat	integerFormatter;    private String		lastGoodString;    private int			minimum;    private int			maximum;    private String		myName		= "";    public IntegerField()    {	this(3, 0, 0, 0);    }    public IntegerField(	    int			columns	)    {    	this(columns, 0, 0, 0);    }    public IntegerField(    	    int			columns,    	    int			initialValue,    	    int			minimum,    	    int			maximum    	)    {	super(columns);	this.minimum		= minimum;	this.maximum		= maximum;	toolkit			= Toolkit.getDefaultToolkit();	integerFormatter	=		NumberFormat.getNumberInstance(Locale.getDefault());	integerFormatter.setParseIntegerOnly(true);	addTextListener(this);	lastGoodString		= Integer.toString(initialValue);	setText(lastGoodString);    }    public void setMyName(    	    String myName    	)    {    	this.myName = myName;    }    public int getValue()    {    	if (lastGoodString.length() == 0) {    	    lastGoodString	= "0";    	}	try {	    return(integerFormatter.parse(lastGoodString).intValue());	}	catch (ParseException e) {	    System.err.println("Unexpected exception " + e.getMessage()		+ " parsing \"" + lastGoodString + "\"");	    lastGoodString = "0";	    return (0);	}    }    public void setValue(	    int			value	)    {	lastGoodString		= integerFormatter.format(value);	setText(lastGoodString);	selectAll();    }    public void setMinimum(    	    int			minimum    	)    {    	this.minimum		= minimum;    	if (minimum < maximum && Integer.parseInt(getText()) < minimum) {    	    String newString	= Integer.toString(minimum);    	    setText(newString);    	    lastGoodString	= newString;    	}    }    public int getMinimum()    {    	return (minimum);    }    public void setMaximum(    	    int			maximum    	)    {    	this.maximum		= maximum;    	if (minimum < maximum && Integer.parseInt(getText()) > minimum) {    	    String newString	= Integer.toString(maximum);    	    setText(newString);    	    lastGoodString	= newString;    	}    }    public int getMaximum()    {    	return (maximum);    }    /*     * Implement the TextListener interface.     */    public synchronized void textValueChanged(	    TextEvent		event	)    {	try {	    String newString	= getText();	    if (newString.length() != 0) {		int newValue	= Integer.parseInt(newString);		if (minimum < maximum		 && (newValue < minimum || newValue > maximum)) {		    throw new NumberFormatException("range");		}    	    }	    lastGoodString	= newString;	}	catch (NumberFormatException e) {	    if (SunSphere.logErrors) {		System.out.println(myName + " IntegerField error."			+ "\nOld String = \"" + lastGoodString + "\""			+ "\nNew String = \"" + getText() + "\""			+ "\n" + e		    );	    }	    toolkit.beep();	    setText(lastGoodString);	}    }				}