1

谢谢您的帮助!我正在使用 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();
        }
    }
}
4

1 回答 1

1

将 解析String为后Double,添加对 的验证Double以确保它在您想要的范围内。如果不是,就直接return调用,如果是,调用super.insertor 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;
 }
于 2013-03-06T20:23:27.363 回答