溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用JAVA實(shí)現(xiàn)Undo、Redo,Copy、Paste、Cut

發(fā)布時(shí)間:2021-11-20 17:00:35 來源:億速云 閱讀:242 作者:小新 欄目:編程語言

小編給大家分享一下怎么用JAVA實(shí)現(xiàn)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實(shí)現(xiàn)Undo、Redo,Copy、Paste、Cut
 * Description:用JAVA實(shí)現(xiàn)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());
  }

}

看完了這篇文章,相信你對(duì)“怎么用JAVA實(shí)現(xiàn)Undo、Redo,Copy、Paste、Cut”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI