Sun*_*hoo 9 java swing listener
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);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我在textarea中设置文本期间发现以下错误.我不知道该如何解决.
Exception in thread "AWT-EventQueue-0"
java.lang.IllegalStateException: Attempt to mutate in notification
Run Code Online (Sandbox Code Playgroud)
我认为问题是在文档中设置文本或在文档监听器中设置文档.但我不知道如何解决这个问题.请帮我解决这个问题.
Cha*_*ick 10
您无法修改DocumentListener中的文档.编写一个自定义文档,它会覆盖insertString()或remove()方法.
从Java教程:如何编写DocumentListener
文档监听器不应修改文档的内容; 在收听者收到更改通知时,更改已完成.而是编写一个自定义文档来覆盖insertString或删除方法,或两者兼而有之.有关详细信息,请参阅侦听文档的更改.