Индивидуальное поле JTextfield - только целое число с ограничением

1

У меня есть класс, который допускает только целые числа с ограниченным количеством. Проблема в том, что класс выполняет свою работу, но когда я использую несколько объектов, он принимает только последнее число ограничений объектов и относится к другим.

Я также не мог избавиться от статических предупреждений.

Код есть;

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

Результат no1, no2 и no3 имеет (10) в качестве ограничения.

Example:
no1: 1234567890 should be max len 12345
no2: 1234567890 should be max len 1234567
no3: 1234567890 it okay
Теги:
swing
jtextfield

1 ответ

2
Лучший ответ

Это потому, что ваш limitInt является static, что означает, что он имеет одинаковое значение для всех экземпляров этого класса (что делает ключевое слово "static" в классе?). Сделайте его нестатическим, и каждый экземпляр вашего класса будет иметь для него свое значение.

Если вы хотите использовать limitInt во внутреннем классе UpperCaseDocument, тогда сделайте этот класс UpperCaseDocument. Однако, если вы это сделаете, каждый экземпляр UpperCaseDocument также будет иметь связанный с ним экземпляр LimitedIntegerTF.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню