set editor kit方法调用时如何保留之前的Undoable Edit Listener

How to retain previous Undoable Edit Listener When set editor kit mehtod is called

我已经在 J​​TextPane 中注册了 Undoable Edit Listener。

当编辑器工具包保持不变时效果很好。

但是当我打开另一个不同扩展名的文件时。我必须更改文本窗格编辑器工具包。

注意:实际上textArea是JTextPane的一个实例

   if(ext.equals(".txt")){
try{
   // textArea.setText(null);
textArea.setEditorKit(defaultkit);

    String read=reader.readLine();
StringBuilder text = new StringBuilder();
    int offset =0;
  //int test=0;
     while (read  !=null){
text.append(read);
text.append('\n');
read = reader.readLine();


    }
textArea.setText(text.toString());

}catch(IOException e ){}
//catch(BadLocationException e ){}

 }
 else{

     try {
 FileInputStream fis = new FileInputStream(path);    


 if(ext.equals(".rtf")){


 textArea.setEditorKit(ek);
 textArea.getEditorKit().read(fis, textArea.getDocument(), 0);


     }

我发现当调用 setEditorKit 方法时,注册文档侦听器停止执行它的功能。

当我注册另一个可撤消的编辑监听器时,它将不起作用

textArea.setEditorKit(ek);
textArea.addUndoableEditListener(new MyListener());

I have to change the textpane editor kit

不,你不知道。

您只需使用:

textPane.setText("");

清除数据。

当然,如果您这样做,两个文件将使用同一个侦听器。所以你想在每次更改文件时替换编辑侦听器。

我找到了问题及其解决方案

我在注册另一个文档侦听器时使用了新的文档侦听器实例

MyDocumentListener dl = new MyDocumentListener();
textArea.getDocument().addUndoableEditListener(new MyDocumentListener());

相反,我应该每次都使用它:

textArea.getDocument().addUndoableEditListener(dl);