2015-02-06 29 views
1

我有一个只允许有限数量的整数的类。问题是,课程正在完成它的工作,但是当我使用多个对象时,它只采用最后一个对象限制数并适用于其他对象。定制JTextfield - 只限于整数

我也无法摆脱静态警告。

代码是;

public class LimitedIntegerTF extends JTextField { 

    private static final long serialVersionUID = 1L; 
    private static int limitInt; 
    public LimitedIntegerTF() { 
     super(); 
    } 

    public LimitedIntegerTF(int limitInt) { 
     super(); 
     setLimit(limitInt); 
    } 

    @SuppressWarnings("static-access") 
    public final void setLimit(int newVal) 
    { 
     this.limitInt = newVal; 
    } 

    public final int getLimit() 
    { 
     return limitInt; 
    } 

    @Override 
    protected Document createDefaultModel() { 
     return new UpperCaseDocument(); 
    } 

    @SuppressWarnings("serial") 
    static class UpperCaseDocument extends PlainDocument { 

     @Override 
     public void insertString(int offset, String strWT, AttributeSet a) 
       throws BadLocationException { 

      if(offset < limitInt){ 
       if (strWT == null) { 
        return; 
       } 

       char[] chars = strWT.toCharArray(); 
       boolean check = true; 

       for (int i = 0; i < chars.length; i++) { 

        try { 
         Integer.parseInt(String.valueOf(chars[i])); 
        } catch (NumberFormatException exc) { 
         check = false; 
         break; 
        } 
       } 

       if (check) 
        super.insertString(offset, new String(chars),a); 

      } 
     } 
    } 
} 

我怎么称呼另一个班;

final LimitedIntegerTF no1 = new LimitedIntegerTF(5); 
final LimitedIntegerTF no2 = new LimitedIntegerTF(7); 
final LimitedIntegerTF no3 = new LimitedIntegerTF(10); 

结果是no1no2,和no3具有(10)作为限制。

Example: 
no1: 1234567890 should be max len 12345 
no2: 1234567890 should be max len 1234567 
no3: 1234567890 it's okay 

回答

2

这是因为你的limitIntstatic,这意味着它具有该类(What does the 'static' keyword do in a class?)的所有实例相同的值。使其成为非静态的,并且您的课程的每个实例都将拥有自己的值。

如果您想在内部类UpperCaseDocument中使用limitInt,那么使该类非静态。但是,如果您这样做,UpperCaseDocument的每个实例也都会有一个与之关联的LimitedIntegerTF的实例。