2013-03-06 72 views
0

謝謝你的幫助! 我正在使用Documentfilter來限制輸入的範圍。在我的代碼中,我可以將輸入限制爲十進制。但是我怎樣才能限制數字的範圍呢? 例如,對於textfield1:1-3,對於textfield2:10-80?Java-如何限制輸入號碼範圍是Document Filter?

這裏是我的代碼:

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(); 
     } 
    } 
} 
+1

JSpinner的使用與numberSpinnerModel – mKorbel 2013-03-06 20:50:49

回答

0

您解析的StringDouble,添加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; 
}