JFormattedTextField - Разрешить ввод только определенных символов - Java
Формулировка задачи:
Использую
MaskFormatter
в компонентеJFormattedTextField
. Это очень удобно, когда нужно ввести ограничение на ввод только цифр или только букв. Но как разрешить ввод толькоопределенных символов
? (Например только буквы а,b,с) Иличислел из диапазона
(например от 1 до 100) Может быть, можно создать собственную маску? Заранее спасибо.Решение задачи: «JFormattedTextField - Разрешить ввод только определенных символов»
textual
Листинг программы
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
public class Jframe extends JFrame {
public Jframe() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(500, 400, 400, 300);
setLayout(null);
JTextField tf = new JTextField(10);
tf.setBounds(20, 20, 340, 30);
add(tf);
setVisible(true);
// магия начинается тут
((AbstractDocument) tf.getDocument()).setDocumentFilter(new MyDocumentFilter());
}
public static void main(String[] args) {
new Jframe();
}
}
// например, мы хотим фильтровать цифры 1 3 5 7 9
class MyDocumentFilter extends DocumentFilter {
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
string = string.replaceAll("[13579]", "");
super.insertString(fb, offset, string, attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
text = text.replaceAll("[13579]", "");
super.replace(fb, offset, length, text, attrs);
}
}