У меня есть класс, который допускает только целые числа с ограниченным количеством. Проблема в том, что класс выполняет свою работу, но когда я использую несколько объектов, он принимает только последнее число ограничений объектов и относится к другим.
Я также не мог избавиться от статических предупреждений.
Код есть;
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
Это потому, что ваш limitInt
является static
, что означает, что он имеет одинаковое значение для всех экземпляров этого класса (что делает ключевое слово "static" в классе?). Сделайте его нестатическим, и каждый экземпляр вашего класса будет иметь для него свое значение.
Если вы хотите использовать limitInt
во внутреннем классе UpperCaseDocument
, тогда сделайте этот класс UpperCaseDocument
. Однако, если вы это сделаете, каждый экземпляр UpperCaseDocument
также будет иметь связанный с ним экземпляр LimitedIntegerTF
.