У меня есть панель редактора, которая отображает редактируемую информацию, которая изменяется в зависимости от того, что пользователь выбрал в списке.Итак, для реализации моей функции отмены / повтора я должен сначала повторно выбрать элемент, который пользователь выбрал при внесении своих правок, прежде чем отменить / повторить их.Однако мне трудно добавить функциональность в события документа по умолчанию, потому что, когда я пытаюсь расширить этот класс, я получаю ошибку «Нет включающего экземпляра».
ниже - мой код отмены управления.Я знаю, что для JEditorPane нет 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();
}
}
}