Каким-то образом вышеуказанное решение не сработало для меня. Вместо этого я использовал DocumentFilter, как показано ниже:
public class StockPublicNotesDocumentFilter extends DocumentFilter {
private final int maxLength;
public StockPublicNotesDocumentFilter (int maxLength) {
this.maxLength = maxLength;
}
/**
* {@inheritDoc}
*/
public void insertString (DocumentFilter.FilterBypass fb, int offset, String str, AttributeSet attr)
throws BadLocationException {
if ((fb.getDocument().getLength() + str.length()) <= this.maxLength)
super.insertString(fb, offset, str, attr);
else
Toolkit.getDefaultToolkit().beep();
}
/**
* {@inheritDoc}
*/
public void replace (DocumentFilter.FilterBypass fb, int offset, int length, String str, AttributeSet attrs) throws BadLocationException {
if ((fb.getDocument().getLength() + str.length()) <= this.maxLength)
super.replace(fb, offset, length, str, attrs);
else
Toolkit.getDefaultToolkit().beep();
}
}
Это будет называться
JTextArea comment = componentFactory.generateTextArea(stock.getComment());
StockPublicNotesDocumentFilter publicNotesfilter = new StockPublicNotesDocumentFilter(PUBLIC_NOTES_MAX_CHARS);
((PlainDocument) comment.getDocument()).setDocumentFilter(publicNotesfilter);