사용자가 목록에서 선택한 내용에 따라 변경 가능한 편집 가능한 정보를 표시하는 편집기 창이 있습니다. 따라서 실행 취소/다시 실행 기능을 구현하기 위해서는 사용자가 선택한 항목을 실행 취소/다시 실행하기 전에 편집 할 때 먼저 다시 선택해야합니다. 그러나 클래스를 확장하려고 할 때 "No enclosing instance"오류가 발생하기 때문에 기본 문서 이벤트에 기능을 추가하기가 어렵습니다.DefaultDocumentEvent를 확장 할 수 없습니다. 기본 편집 창 편집에 기능을 추가하는 방법에 대한 아이디어가 있습니까?
아래는 내 undomanager 코드입니다. JEditorPane에 setSelection 및 getCurrentSelection이 없다는 것을 알고 있지만 사용자가 선택한 항목을 결정하기 위해 이러한 기능과 함께 확장 된 버전을 사용하고 있다고 가정합니다. DefaultDocumentEvent
이 AbstractDocument
의 정적 필드 인 경우
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();
}
}
}