繁体   English   中英

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

[英]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.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;
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM