用JAVA实现撤消、重做、复制、粘贴、剪切

  programlover原创作品
  包clipboard;
  导入javax.swing.JTextArea;
  导入java.awt.datatransfer.*;
  导入java.awt.*;
  导入javax.swing.*;
  导入java.io.*;
  导入javax.swing.undo.*;
  导入javax.swing.text.*;
  导入javax.swing.event.*;
  导入java.awt.event.*;
  /**
  *标题:用JAVA实现Undo、Redo,Copy、Paste、Cut
  *描述:用JAVA实现Undo、Redo,Copy、Paste、Cut
  *版权所有:Copyright(c)2001
  *公司:
  * 作者:彭雄建
  * version 1.0
  */
  public class ClipTextArea extends JTextArea Implements ClipboardOwner{
  Clipboard strBoard=this.getToolkit().getSystemClipboard();
  UndoManager撤消=new UndoManager();
  文档doc=getDocument();
  公共ClipTextArea(){
  doc.addUndoableEditListener(new UndoableEditListener(){
  公共void undoableEditHappened(UndoableEditEvent e){
  doc_addit(e);}
  });
  添加动作映射();
  }
  public void addActionMap()
  {
  getActionMap().put("Undo",new AbstractAction("Undo"){
  public void actionPerformed(ActionEvent evt){
  try{
  if(undo.canUndo()){
  undo.undo();}}
  }
  }catch(CannotUndoException e){
  }
  }
  });
  getInputMap().put(KeyStroke.getKeyStroke("控制Z"),"撤消");
  getActionMap().put("Redo",new AbstractAction("Redo"){
  public void actionPerformed(ActionEvent evt){
  try
  {
  if(undo.canRedo()){
  undo.redo();
  }
  }catch(CannotRedoException e){
  }
  }
  });
  getInputMap().put(KeyStroke.getKeyStroke("控制R"),"重做");
  getActionMap().put("复制",new AbstractAction("复制"){
  public void actionPerformed(ActionEvent evt){
  copy();
  }
  });
  getInputMap().put(KeyStroke.getKeyStroke("控制C"),"复制");
  getActionMap().put("Cut",new AbstractAction("Cut"){
  public void actionPerformed(ActionEvent evt){
  cut();
  }
  });
  getInputMap().put(KeyStroke.getKeyStroke("控制X"),"剪切");
  getActionMap().put("粘贴",new AbstractAction("粘贴"){
  public void actionPerformed(ActionEvent evt){
  Paste();
  }
  });
  getInputMap().put(KeyStroke.getKeyStroke("控制V"),“粘贴”);
  }
  公共无效复制()
  {
  字符串sCopy=getSelectedText();
  if(sCopy!=null)
  {
  StringSelection sSelection=new StringSelection(sCopy);
  strBoard.setContents(sSelection,this);
  }
  }
  public void cut()
  {
  String sCopy=getSelectedText();
  if(sCopy!=null)
  {
  StringSelection sSelection=new StringSelection(sCopy);
  strBoard.setContents(sSelection,this);
  this.replaceSelection("");
  }
  }
  public void Paste()
  {
  Transferable sTransf=strBoard.getContents(this);
  if(sTransf!=null)
  {
  try
  {
  String sPaste=(String)sTransf.getTransferData(DataFlavor.stringFlavor);
  this.replaceRange(sPaste,getSelectionStart(),getSelectionEnd());
  }
  catch(UnsupportedFlavorException e)
  {
  }
  catch(IOException ioe)
  {
  }
  }
  }
  public void LostOwnership(Clipboard剪贴板,可传输内容)
  {
  }
  void doc_addit(UndoableEditEvent e)
  {
  undo.addEdit(e.getEdit());
  }
  }