JTextFeild控件,限制长度,只输入4个字符,符合实现?

解决方案 »

  1.   

    public class NWNumberField extends JTextField implements RendererComponent{
    private Toolkit toolkit;
    private int maxValue = Integer.MAX_VALUE;
    private int minValue = Integer.MIN_VALUE;
    private int maxLength;
    public NWNumberField(int value, int maxLength) {
    super();
    this.maxLength = maxLength;
    setValue(new Integer(value));
    }
    public void setMaxValue(int maxValue){
    this.maxValue = maxValue;
    }
    protected int getMaxValue(){
    return this.maxValue;
    }public Object getValue() {
    int retVal = 0;
    try {
        retVal = Integer.parseInt(getText());
        if(retVal > maxValue){
        retVal = maxValue;
        }else
        if(retVal<minValue){
        retVal = minValue;
        }} catch (NumberFormatException e) {
    // This should never happen because insertString allows
    // only properly formatted data to get in the field.
    //toolkit.beep();
    retVal = 0;
    }
    return new Integer(retVal);
    }public void setValue(Object value) {if(value==null || value.equals(""))
    setText("0");
    else
        setText(value.toString());
    }protected Document createDefaultModel() {
    return new NumberDocument(this);
    }protected class NumberDocument extends PlainDocument {
    NWNumberField field ;
    public NumberDocument(NWNumberField field){
    this.field = field;
    }
    public void insertString(int offs,
     String str,
     AttributeSet a)
    throws BadLocationException {if(str==null||str.equals(""))
    return ;char[] source = str.toCharArray();
    char[] result = new char[source.length];
    int j = 0;for (int i = 0; i < result.length; i++) {
    if (Character.isDigit(source[i]))
    result[j++] = source[i];
    else {
    //toolkit.beep();
                                            Toolkit.getDefaultToolkit().beep();
    }
    }StringBuffer sb = new StringBuffer();
    sb.append(field.getText());
    sb.insert(offs,new String(result, 0, j));
    try{
    if(maxLength>0 && this.getLength()< maxLength && Integer.parseInt(sb.toString())<=field.getMaxValue()){
    super.insertString(offs, new String(result, 0, j), a);
    }
    }catch (NumberFormatException ex){}
    }
    }
    public void setRendererValue(Object renderer) {    this.setValue(renderer+"");
    }public Object getRendererValue() {return this.getValue();
    }public Component getNormalRenderer() {return null;
    }}
      

  2.   

    在keylistener监听,如果getText().length()>4就进行操作