Java如何使用is Document Filter限制输入数字范围



感谢您的帮助!我使用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.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;
 }

最新更新