Java-如何使用文档过滤器限制输入数字范围?

标签 java

感谢您的帮助! 我正在使用 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.insertreplace。您需要为每个范围或在其构造函数中采用该范围的范围提供一个 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/

相关文章:

java - 网络中的声音识别

java - jsp java.lang.NumberFormatException : For input string: "atividade"

java - 删除字符串的第一个字符 O(1)

java - Ebean 多对多查询

Java 字符串到字节的转换是不同的

支持putty生成 key 的java ssh库

java - 拼出时间

java - JSF2.2 : Get result of action (no reload)

java - java中的clone()是浅拷贝吗?

java - Super CSV (Java) - 读取列名中有空格的文件