2011-02-10 7 views
0

사용자가 목록에서 선택한 내용에 따라 변경 가능한 편집 가능한 정보를 표시하는 편집기 창이 있습니다. 따라서 실행 취소/다시 실행 기능을 구현하기 위해서는 사용자가 선택한 항목을 실행 취소/다시 실행하기 전에 편집 할 때 먼저 다시 선택해야합니다. 그러나 클래스를 확장하려고 할 때 "No enclosing instance"오류가 발생하기 때문에 기본 문서 이벤트에 기능을 추가하기가 어렵습니다.DefaultDocumentEvent를 확장 할 수 없습니다. 기본 편집 창 편집에 기능을 추가하는 방법에 대한 아이디어가 있습니까?

아래는 내 undomanager 코드입니다. JEditorPane에 setSelection 및 getCurrentSelection이 없다는 것을 알고 있지만 사용자가 선택한 항목을 결정하기 위해 이러한 기능과 함께 확장 된 버전을 사용하고 있다고 가정합니다. DefaultDocumentEventAbstractDocument의 정적 필드 인 경우

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

그것은 당신의 코드에 액세스 할 수 있습니다.

관련 문제