gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:34:09 24 4
gpt4 key购买 nike

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

我也无法摆脱静态警告。

代码是;

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

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

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

最佳答案

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

如果您想在内部类 UpperCaseDocument 中使用 limitInt,则也将该类设为非静态。但是,如果您这样做,UpperCaseDocument 的每个实例还将有一个与其关联的 LimitedIntegerTF 实例。

关于java - 自定义 JTextfield - 仅限整数且有限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com