Я пытаюсь сделать некоторые JTextFields для проверки только двойных чисел, таких как валюта ($xxx.xx), я написал класс, используя DocumentFilter для проверки шаблона и размера символов, но чего я не могу добиться, так это того, что пользователь может ввести более одной точки.
Вот пример моего кода:
private class LimitCharactersFilter extends DocumentFilter {
private int limit;
private Pattern regex = Pattern.compile( "\\d*(\\.\\d{0,2})?");
private Matcher matcher;
public LimitCharactersFilter(int limit) {
this.limit = limit;
}
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr)
throws BadLocationException {
String fullText = fb.getDocument().getText(0, fb.getDocument().getLength()) + string;
matcher = regex.matcher(fullText);
if((fullText.length()) <= limit && matcher.matches()){
fb.insertString(offset, string, attr);
}else{
Toolkit.getDefaultToolkit().beep();
}
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
throws BadLocationException {
String fullText = fb.getDocument().getText(0, fb.getDocument().getLength()) + text;
matcher = regex.matcher(fullText);
matcher = regex.matcher(text);
if((fullText.length()) <= limit && matcher.matches()){
fb.replace(offset,length, text, attrs);
}else{
Toolkit.getDefaultToolkit().beep();
}
}
}
А вот изображение того, как выглядит интерфейс:
Проверка предела символов отлично работает, но я хочу запретить пользователю вводить более двух цифр, если точка уже есть.
Надеюсь, кто-то может помочь мне с этим.
\\d*\\.?\\d{0,2}
, но это будет хорошо только для живого ввода. - person Wiktor Stribiżew   schedule 12.02.2016new JFormattedTextField(NumberFormat.getCurrencyInstance())
. - person VGR   schedule 12.02.2016