DecimalDocument 限制只能输入数字的TextField

import javax.swing.JTextField;
import javax.swing.text.Document;

/**
 * 整数输入框</p>  
 * 
 * @author luojialin
 * @since 2014-2-24
 */
public class IntegerTextField extends JTextField {
	
	  public IntegerTextField() {
	        this(new IntegerDocument(), null, 0);
	    }

	    public IntegerTextField(String text) {
	        this(new IntegerDocument(), text, 0);
	    }

	    public IntegerTextField(int columns) {
	        this(new IntegerDocument(), null, columns);
	    }

	    public IntegerTextField(String text, int columns) {
	        this(new IntegerDocument(), text, columns);
	    }

	    public IntegerTextField(Document doc, String text, int columns) {
	    	super(doc,text,columns);
	    	if(!(doc instanceof  IntegerDocument))	
	    		 throw new IllegalArgumentException("Document must be IntegerDocument");
	    	
	    }

}
import javax.swing.text.*;
import java.awt.*;

public class IntegerDocument extends PlainDocument
{

    public void insertString(int index, String s, AttributeSet a)
            throws BadLocationException {

        boolean noval = false;

        if ((s == null) || (s.length() == 0)) {
            return;
        }

        StringBuffer t = new StringBuffer(getLength() + s.length());

        t.append(getText(0, index));
        t.append(s);
        t.append(getText(index, getLength() - index));

        try {
            Integer.parseInt(t.toString().trim());
        } catch (NumberFormatException e) {
            noval = true;

            if (noval) {
                Toolkit.getDefaultToolkit().beep();

                return;
            }
        }

        super.insertString(index, s, a);
    }


}

  

猜你喜欢

转载自gxblluojialin.iteye.com/blog/2021636