我想确保我的JTextField中始终存在正整数。例如,当创建GUI时,JTextField当前有一个默认的“1”,我希望如果用户决定点击退格,而不是成为一个空文本字段,我希望它自动将文本设置为“ 0" 。原因是因为text字段还有一个监听器,它调用一个方法来保持GUI的另一部分根据这个数字更新。
我对DocumentFilter很陌生,所以我甚至不确定我是否朝着正确的方向前进,但到目前为止,这是我的目标:
public class IntegerFilter extends DocumentFilter {
public void remove(FilterBypass fb, int offs,
int len) throws BadLocationException {
if (offs == 0) {
// I'm trying to think if there's something I can put here
} else {
super.remove(fb, offs, len);
}
}
public void replace(FilterBypass fb, int offs, int len, String str,
AttributeSet a) throws BadLocationException {
String text = fb.getDocument().getText(0, fb.getDocument().getLength());
text += str;
if (text.matches("\\d+")) {
super.replace(fb, offs, len, str, a);
}
}
}
截至目前,我正在覆盖过滤器的remove()方法,并检查用户正在删除的数字是否是最后一个。如果没有,则删除按常规方式工作,但如果是,则没有任何反应。
我认为我遇到的问题是我想在remove方法中调用replace方法,但我没有使用AttributeSet。
答案 0 :(得分:4)
//我正在考虑是否有可以放在这里的东西
首先,你的基本逻辑是错误的。你不能只检查偏移量。你可以在文本字段中有5个数字,只是试图删除第一个数字。
您想要做的是:
super.remove(...)
以从文档中删除数字我没有使用AttributeSet。
对于JTextField,AttributeSet
将为null。