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