[英]Java-How to restrict input number range with is Document Filter?
谢谢您的帮助! 我正在使用Documentfilter来限制输入范围。 在我的代码中,我可以将输入限制为十进制。 但是,如何限制数字的范围呢? 例如,对于textfield1:1-3,对于textfield2: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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.