Я попытался собрать пользовательский PlainDocument, сделанный другими, для того, который мне был нужен, но, поскольку я не знаю механики PlainDocument, у меня не получилось, и это не сработало. Мне нужно что-то, что гарантирует, что мое текстовое поле позволяет использовать только 2 буквы, поэтому все, что a-zA-Z встречается только дважды. Я попробовал это первым:
public class LetterDocument extends PlainDocument {
private String text = "";
@Override
public void insertString(int offset, String txt, AttributeSet a) {
try {
text = getText(0, getLength());
if ((text + txt).matches("^[a-zA-Z]{2}$")) {
super.insertString(offset, txt, a);
}
} catch (Exception ex) {
Logger.getLogger(LetterDocument.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Это даже не позволяет мне вводить что-либо. Затем я попробовал это, которое я попытался собрать из двух других потоков, один из которых позволял вводить только буквы, а другой ограничивал символы:
public class LetterDocument extends PlainDocument {
private int limit;
private String text = "";
LetterDocument(int limit) {
super();
this.limit = limit;
}
@Override
public void insertString(int offset, String txt, AttributeSet a)
throws BadLocationException {
if (txt == null)
return;
try {
text = getText(0, getLength());
if (((text + txt).matches("[a-zA-Z]"))
&& (txt.length()) <= limit) {
super.insertString(offset, txt, a);
}
} catch (Exception ex) {
Logger.getLogger(LetterDocument.class.getName()).log(Level.SEVERE,
null, ex);
}
}
}
Я понятия не имею, что случилось.