DocumentListener dl = new MessageDocumentListener();
((AbstractDocument) nboxArea.getDocument()).setDocumentFilter(new DocumentFilter() {
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
string = string.replaceAll("\t", "");
super.insertString(fb, offset, string,(javax.swing.text.AttributeSet) attr);
}
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
text = text.replaceAll("\t", "");
//TODO must do something here
super.replace(fb, offset, length, text,(javax.swing.text.AttributeSet) attrs);
}
});
JTextArea evArea = (JTextArea) c;
evArea.getDocument().removeDocumentListener(dl);
evArea.setText(originalMessage);
В этом случае я нашел следующую ошибку во время текста набора в текстовой области. Я не знаю, как решить.
Exception in thread "AWT-EventQueue-0"
java.lang.IllegalStateException: Attempt to mutate in notification
Я думаю, что проблема состоит в том, чтобы установить текст в документе или документе установки в слушателе документа. Но я не знаю, как решить это. Помогите мне решить эту проблему.
Вы не можете изменять документ внутри DocumentListener. Вместо этого напишите собственный документ, который переопределяет методы insertString () или remove ().
Из руководств по Java: Как написать DocumentListener
Прослушиватели документов не должны изменять содержимое документа; Изменение уже завершено к тому моменту, когда слушатель уведомлен об изменении. Вместо этого напишите настраиваемый документ, который переопределяет методы insertString или remove, или и то, и другое. Подробнее см. Прослушивание изменений в документе .