2011-02-10 1 views
0

私は、ユーザーがリストで選択した内容に基づいて変更可能な編集可能な情報を表示するエディタを持っています。したがって、元に戻す/やり直し機能を実装するためには、元に戻す/やり直す前に、編集するときに選択した項目を最初に再選択する必要があります。しかし、そのクラスを拡張しようとすると "No enclosing instance"というエラーが出るので、デフォルトのドキュメントイベントに機能を追加するのは難しいと思っています。DefaultDocumentEventを拡張できません。基本的なエディタの編集内容に機能を追加する方法はありますか?

は私の主張していないコードです。 JEdi​​torPaneのsetSelectionとgetCurrentSelectionはありませんが、ユーザーが選択した項目を判断するためにこれらの機能を拡張バージョンとして使用しているようです。

public class MyUndoManager extends UndoManager { 

    private JEditorPane editor; 

    public MyUndoManager() { 
     super(); 
    } 

    public void setEditor(JEditorPane editor) { 
     this.editor = editor; 
    } 

    @Override 
    public synchronized boolean addEdit(UndoableEdit anEdit) { 
     if (anEdit instanceof javax.swing.text.AbstractDocument.DefaultDocumentEvent) { 
      try { 
       MyDocumentEvent evt = ((MyDocumentEvent) anEdit); 
       evt.setCallbackObj(editor.getCurrentSelection()); 
       return super.addEdit(anEdit); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       return false; 
      } 
     } else { 
      return super.addEdit(anEdit); 
     } 
    } 

    private class MyDocumentEvent extends javax.swing.text.AbstractDocument.DefaultDocumentEvent { 

     private Object callbackObj; 

     public void setCallbackObj(Object o) { 
      this.callbackObj = o; 
     } 

     @Override 
     public void undo() throws CannotUndoException { 
      editor.setSelection(o); 
      super.undo(); 
     } 

     @Override 
     public void redo() throws CannotRedoException { 
      editor.setSelection(o); 
      super.redo(); 
     } 
    } 
} 

答えて

0

DefaultDocumentEventAbstractDocumentの静的フィールドであればそれはあなたのコードによってアクセス可能である可能性があります。

関連する問題