自定义 JTextfield - 仅限整数且有限制

Customized JTextfield - Only Integer with Limitation

我有一个 class,它只允许有数量限制的整数。问题是,class 正在做它的工作,但是当我使用多个对象时,它只采用最后一个对象限制编号并应用于其他对象。

我也无法摆脱静态警告。

代码是;

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);

            }
        }
    }
}

我如何在另一个上调用它 class ;

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

结果是no1no2no3(10)作为限制。

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

这是因为您的 limitIntstatic,这意味着它对 class (What does the 'static' keyword do in a class?) 的所有实例具有相同的值。使其成为非静态的,class 的每个实例都会有自己的价值。

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