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());
}
}
闽公网安备 35060202000074号