自定义 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);
结果是no1
,no2
,no3
有(10)
作为限制。
Example:
no1: 1234567890 should be max len 12345
no2: 1234567890 should be max len 1234567
no3: 1234567890 it's okay
这是因为您的 limitInt
是 static
,这意味着它对 class (What does the 'static' keyword do in a class?) 的所有实例具有相同的值。使其成为非静态的,class 的每个实例都会有自己的价值。
如果你想在内部 class UpperCaseDocument
中使用 limitInt
,那么也让 class 成为非静态的。但是,如果您这样做,UpperCaseDocument
的每个实例也会有一个 LimitedIntegerTF
实例与之关联。
我有一个 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);
结果是no1
,no2
,no3
有(10)
作为限制。
Example:
no1: 1234567890 should be max len 12345
no2: 1234567890 should be max len 1234567
no3: 1234567890 it's okay
这是因为您的 limitInt
是 static
,这意味着它对 class (What does the 'static' keyword do in a class?) 的所有实例具有相同的值。使其成为非静态的,class 的每个实例都会有自己的价值。
如果你想在内部 class UpperCaseDocument
中使用 limitInt
,那么也让 class 成为非静态的。但是,如果您这样做,UpperCaseDocument
的每个实例也会有一个 LimitedIntegerTF
实例与之关联。