📄 undoredomanager.java
字号:
package com.sunking.tp.util;
import javax.swing.*;
import javax.swing.undo.*;
import javax.swing.event.*;
import java.awt.event.*;
/**
* <p>Title: </p>
* <p>Description: 撤消恢复管理器</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author <a href="mailto:sunkingxie@hotmail.com">SunKing</a>
* @version 1.0
*/
public class UndoRedoManager {
private static UndoRedoManager defaultManager;
/**
* 单件模式取默认的管理器
* @return
*/
public static UndoRedoManager getDefault() {
if (defaultManager == null) {
defaultManager = new UndoRedoManager();
}
return defaultManager;
}
private UndoManager manager;
private UndoableEditSupport support;
/**
* 重做动作
*/
private RedoAction redoAction;
/**
* 撤消动作
*/
private UndoLastAction undoAction;
private UndoRedoManager() {
manager = new UndoManager();
manager.setLimit(1000);
support = new UndoableEditSupport();
support.addUndoableEditListener(new UndoableApdater());
redoAction = new RedoAction();
undoAction = new UndoLastAction();
addChangeListener(redoAction);
addChangeListener(undoAction);
}
/**
* 新建文件时初始化
*/
public void createNewFile(){
manager.discardAllEdits();
fireUndoableEditChanged(new UndoableChangeEvent(manager));
}
/**
* 取得UndoManger
* @return
*/
public UndoManager getUndoManager() {
return manager;
}
/**
* 加入UndoableEdit
* @param edit
*/
public void postUndoableEdit(UndoableEdit edit){
support.postEdit(edit);
}
/**
* 取得撤消事件
* @return
*/
public Action getUndoAction() {
return undoAction;
}
/**
* 取得重做事件
* @return
*/
public Action getRedoAction() {
return redoAction;
}
/**
* <p>Title:UndoableApdater </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author <a href="mailto:sunkingxie@hotmail.com">SunKing</a>
* @version 1.0
*/
private class UndoableApdater implements UndoableEditListener {
public void undoableEditHappened(UndoableEditEvent e) {
manager.addEdit(e.getEdit());
fireUndoableEditChanged(new UndoableChangeEvent(manager));
}
}
protected EventListenerList listenerList = new EventListenerList();
/**
* 添加UndoableEdit改变监听事件
* @param l
*/
public void addChangeListener(UndoableChangeListener l) {
listenerList.add(UndoableChangeListener.class, l);
}
/**
* 移除UndoableEdit改变监听事件
* @param l
*/
public void removeChangeListener(UndoableChangeListener l) {
listenerList.remove(UndoableChangeListener.class, l);
}
/**
* 激发UndoableEdit改变事件,通知监听者
* @param e
*/
protected void fireUndoableEditChanged(UndoableChangeEvent e) {
Object[] listeners = listenerList.getListenerList();
for (int i = listeners.length - 2; i >= 0; i -= 2) {
if (listeners[i] == UndoableChangeListener.class) {
( (UndoableChangeListener) listeners[i + 1]).stateChanged(e);
}
}
}
/**
* <p>Title: RedoAction</p>
* <p>Description: 重做事件</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author <a href="mailto:sunkingxie@hotmail.com">SunKing</a>
* @version 1.0
*/
class RedoAction extends AbstractAction implements UndoableChangeListener {
public RedoAction() {
// super("Redo");
putValue(Action.SHORT_DESCRIPTION, JTPUtil.getString("Redo"));
putValue(Action.MNEMONIC_KEY, new Integer('R'));
putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("ctrl shift z"));
update();
}
public void actionPerformed(ActionEvent e) {
manager.redo();
undoAction.update();
update();
}
public void update() {
boolean canRedo = manager.canRedo();
if (canRedo) {
setEnabled(true);
putValue(Action.SHORT_DESCRIPTION,
manager.getRedoPresentationName());
} else {
setEnabled(false);
putValue(Action.SHORT_DESCRIPTION, JTPUtil.getString("Redo"));
}
}
public void stateChanged(UndoableChangeEvent e) {
update();
}
}
/**
* <p>Title: UndoLastAction</p>
* <p>Description: 撤消事件</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author <a href="mailto:sunkingxie@hotmail.com">SunKing</a>
* @version 1.0
*/
class UndoLastAction extends AbstractAction implements UndoableChangeListener {
public UndoLastAction() {
// super("Undo");
putValue(Action.SHORT_DESCRIPTION, JTPUtil.getString("Undo"));
putValue(Action.MNEMONIC_KEY, new Integer('U'));
putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("ctrl z"));
update();
}
public void actionPerformed(ActionEvent e) {
manager.undo();
redoAction.update();
update();
}
public void update() {
boolean canUndo = manager.canUndo();
if (canUndo) {
setEnabled(true);
putValue(Action.SHORT_DESCRIPTION,
manager.getUndoPresentationName());
} else {
setEnabled(false);
putValue(Action.SHORT_DESCRIPTION, JTPUtil.getString("Undo"));
}
}
public void stateChanged(UndoableChangeEvent e) {
update();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -