package test;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.text.Document;
import javax.swing.undo.UndoManager;
public class UndoRedoTest {
JFrame tJFrame;
JTextArea tJTextArea;
UndoManager undo = new UndoManager();
Document doc = null;
/**
* 建立用户界面
*
*/
public void BuildUI(){
tJFrame=new JFrame();
tJTextArea=new JTextArea();
tJTextArea.setSize(200,200);
tJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
tJFrame.setSize(500,350);
tJFrame.setVisible(true);
tJFrame.add(tJTextArea);
doc=tJTextArea.getDocument();
undoRedoDefine();
}
/**
* 撤消恢复相关定义
*/
public void undoRedoDefine(){
doc.addUndoableEditListener(
new UndoableEditListener(){
public void undoableEditHappened(UndoableEditEvent arg0) {
// TODO Auto-generated method stub
doc_addEdit(arg0);
}
}
);
addActionMap();//添加撤消与恢复所需的定义
}
public void addActionMap(){
tJTextArea.getActionMap().put("Undo",new AbstractAction("Undo"){
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if(undo.canUndo()){
undo.undo();
}
}
});
tJTextArea.getInputMap().put(KeyStroke.getKeyStroke("control Z"), "Undo");
tJTextArea.getActionMap().put("Redo",new AbstractAction("Redo"){
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if(undo.canRedo()){
undo.redo();
}
}
});
tJTextArea.getInputMap().put(KeyStroke.getKeyStroke("control Y"), "Redo");
}
public void doc_addEdit(UndoableEditEvent e){
undo.addEdit(e.getEdit());
}
/**
* 主函数
* @param args
*/
public static void main(String args[]){
UndoRedoTest urt=new UndoRedoTest();
urt.BuildUI();
}
}