我有一个编辑窗格,显示可编辑的信息,这些信息会根据用户在列表中选择的内容而更改。因此,为了实现我的撤销/重做功能,我必须首先重新选择用户在撤消/重做之前进行编辑时所选择的项目。但是,我发现很难为默认文档事件添加功能,因为当我尝试扩展该类时,我得到“无封闭实例”错误。
下面是我的无人值守代码。我知道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();
}
}
}
答案 0 :(得分:0)
如果DefaultDocumentEvent
是AbstractDocument
的静态字段,则代码可以访问它。