首页 > C风格编程语言 > JAVA编程资料 > 用JAVA实现Undo、Redo,Copy、Paste、Cut
2006
10-08

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

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


}




用JAVA实现Undo、Redo,Copy、Paste、Cut》有 2 条评论

  1. hiroki 说:

    感谢楼主了啊

留下一个回复