感谢您的帮助!我使用Documentfilter来限制输入的范围。在我的代码中,我可以将输入限制为十进制。但是我怎样才能限制数字的范围呢?例如,对于textfield1:1-3,对于textfield 2:10-80?
这是我的代码:
class MyIntFilter2 extends DocumentFilter {
@Override
public void insertString(FilterBypass fb, int offset,
String string, AttributeSet attr)
throws BadLocationException {
try {
if (string.equals(".")
&& !fb.getDocument()
.getText(0, fb.getDocument().getLength())
.contains(".")) {
super.insertString(fb, offset, string, attr);
return;
}
Double.parseDouble(string);
super.insertString(fb, offset, string, attr);
} catch (Exception e) {
Toolkit.getDefaultToolkit().beep();
}
}
@Override
public void replace(FilterBypass fb, int offset, int length,
String text, AttributeSet attrs)
throws BadLocationException {
try {
if (text.equals(".")
&& !fb.getDocument()
.getText(0, fb.getDocument().getLength())
.contains(".")) {
super.insertString(fb, offset, text, attrs);
return;
}
Double.parseDouble(text);
super.replace(fb, offset, length, text, attrs);
} catch (Exception e) {
Toolkit.getDefaultToolkit().beep();
}
}
}
将String
解析为Double
后,添加对Double
的验证以确保它在您想要的范围内。如果不是,则只调用return
;如果是,则调用super.insert
或replace
。您需要为每个范围或在其构造函数中使用该范围的DocumentFilter
。
假设你将最小值和最大值包括在范围内
class MyIntFilter2(Double prMin, Double prMax) extends DocumentFilter {
private Double min;
private Double max;
...
@Override
public void insertString(FilterBypass fb, int offset,
String string, AttributeSet attr)
throws BadLocationException {
...
Double value = Double.parseDouble(string);
if (value.compareTo(max) <= 0 && value.compareTo(min) >= 0) {
super.insertString(fb, offset, string, attr);
} else {
return;
}