Не удается расширить DefaultDocumentEvent.Есть идеи, как добавить функциональность в основные правки редактирования? - PullRequest
0 голосов
/ 10 февраля 2011

У меня есть панель редактора, которая отображает редактируемую информацию, которая изменяется в зависимости от того, что пользователь выбрал в списке.Итак, для реализации моей функции отмены / повтора я должен сначала повторно выбрать элемент, который пользователь выбрал при внесении своих правок, прежде чем отменить / повторить их.Однако мне трудно добавить функциональность в события документа по умолчанию, потому что, когда я пытаюсь расширить этот класс, я получаю ошибку «Нет включающего экземпляра».

ниже - мой код отмены управления.Я знаю, что для 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();
        }
    }
}

1 Ответ

0 голосов
/ 10 февраля 2011

Ваш код может быть доступен, если DefaultDocumentEvent - статическое поле AbstractDocument.

...