用JAVA实现Undo、Redo,Copy、Paste、Cut (转)

用JAVA实现Undo、Redo,Copy、Paste、Cut (转)[@more@]

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

}


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-998627/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-998627/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值