Рассматривая количество просмотров, которые этот вопрос получает, я не нашел ни одного из вышеупомянутых решений, подходящих для моей проблемы. Я решил создать пользовательский PlainDocument , чтобы он соответствовал моим потребностям. Это решение также подает звуковой сигнал при достижении максимального количества символов, или вставленный текст не является целым числом.
private class FixedSizeNumberDocument extends PlainDocument
{
private JTextComponent owner;
private int fixedSize;
public FixedSizeNumberDocument(JTextComponent owner, int fixedSize)
{
this.owner = owner;
this.fixedSize = fixedSize;
}
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException
{
if (getLength() + str.length() > fixedSize) {
str = str.substring(0, fixedSize - getLength());
this.owner.getToolkit().beep();
}
try {
Integer.parseInt(str);
} catch (NumberFormatException e) {
// inserted text is not a number
this.owner.getToolkit().beep();
return;
}
super.insertString(offs, str, a);
}
}
имплантируется следующим образом:
JTextField textfield = new JTextField();
textfield.setDocument(new FixedSizeNumberDocument(textfield,5));