首页 > 学院 > 开发设计 > 正文

用JAVA实现Undo、Redo,Copy、Paste、Cut

2019-11-18 13:24:37
字体:
来源:转载
供稿:网友

  package clipborad;
  import javax.swing.JTextArea;
  import java.awt.datatransfer.*;
  import java.awt.*;
  import javax.swing.*;
  import java.io.*;
  import javax.swing.undo.*;
  import javax.swing.text.*;
  import javax.swing.event.*;
  import java.awt.event.*;
  /**
  * Title: 用JAVA实现Undo、Redo,Copy、Paste、Cut
  * Description:用JAVA实现Undo、Redo,Copy、Paste、Cut
  * Copyright: Copyright (c) 2001
  * Company:
  * @author: 彭建雄
  * @version 1.0
  */
  
  public class ClipTextArea extends JTextArea implements ClipboardOwner{
  
   Clipboard strBoard = this.getToolkit().getSystemClipboard();
   UndoManager undo = new UndoManager();
   Document doc = getDocument();
  
  
   public ClipTextArea() {
   doc.addUndoableEditListener(new UndoableEditListener(){
   public void undoableEditHappened(UndoableEditEvent e) {
   doc_addedit(e);}
   });
  
   addActionMap();
   }
  
   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("control Z"), "Undo");
  
   getActionMap().put("Redo",new AbstractAction("Redo") {
   public void actionPerformed(ActionEvent evt) {
   try
   {
   if (undo.canRedo()) {
   undo.redo();
   }
   } catch (CannotRedoException e) {
   }
   }
   });
   getInputMap().put(KeyStroke.getKeyStroke("control R"), "Redo");
  
   getActionMap().put("Copy",new AbstractAction("Copy") {
   public void actionPerformed(ActionEvent evt) {
   copy();
   }
   });
   getInputMap().put(KeyStroke.getKeyStroke("control C"), "Copy");
  
   getActionMap().put("Cut",new AbstractAction("Cut") {
   public void actionPerformed(ActionEvent evt) {
   cut();
   }
   });
   getInputMap().put(KeyStroke.getKeyStroke("control X"), "Cut");
  
   getActionMap().put("Paste",new AbstractAction("Paste") {
   public void actionPerformed(ActionEvent evt) {
   paste();
   }
   });
   getInputMap().put(KeyStroke.getKeyStroke("control V"), "Paste");
  
   }
  
  
   public void copy()
   {
   String 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 clipboard,Transferable contents)
   {
  
   }
  
   void doc_addedit(UndoableEditEvent e)
   {
   undo.addEdit(e.getEdit());
   }
  
  }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表