1

ご協力ありがとうございました!Documentfilter を使用して入力範囲を制限しています。私のコードでは、入力を 10 進数に制限できます。しかし、どうすれば数値の範囲も制限できますか? たとえば、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

を に解析した後、StringDouble検証を追加して、Double必要な範囲内にあることを確認します。そうでない場合は、そうである場合は、またはreturnを呼び出します。範囲ごとに、またはコンストラクターで範囲を取るものが必要です。super.insertreplaceDocumentFilter

範囲に最小値と最大値を含めると仮定すると、このようなもの

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 に答える