感谢您的帮助! 我正在使用 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
的验证,以确保它在您想要的范围内。如果不是,只需返回
,如果是,则调用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;
}
关于Java-如何使用文档过滤器限制输入数字范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15257039/