我創建了一個覆蓋JTextField
的外部類。在這個類中,我添加了一個替換的DocumentListener,可以防止輸入某個字符。下面是代碼(它不是確切的代碼,對於這個問題的簡單的目的):在操作textField數據時在textField上重寫getText方法
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
class test extends JTextField{
private String filteredText;
public void getDefaultText(){
super.getText();
}
public String getText(){
return filteredText;
}
public void remword(){
super.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent arg0) {
}
@Override
public void insertUpdate(DocumentEvent arg0) {
Runnable ru = new Runnable() {
@Override
public void run() {
String finalText = getDefaultText().replace("xyz", "asd");
setText(finalText);
filteredText = finalText;
}
}
};
SwingUtilities.invokeLater(ru);
}
@Override
public void removeUpdate(DocumentEvent arg0) {
}
});
}
}
現在,除非我用getText()
方法,它返回錯誤Attempt to mutate in notificaton
此代碼工作正常。我試圖用和Runnable
搞亂無濟於事。