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

    技术2022-05-11  128

    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());  }

    }


    最新回复(0)