// This example is from _Java Examples in a Nutshell_. (http://www.oreilly.com)
// Copyright (c) 1997 by David Flanagan
// This example is provided WITHOUT ANY WARRANTY either expressed or implied.
// You may study, use, modify, and distribute it for non-commercial purposes.
// For any commercial use, see http://www.davidflanagan.com/javaexamples
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
/**
* This program demonstrates how to add string cut-and-paste capabilities
* to an application.
**/
public class StringCutAndPaste extends Frame implements ActionListener
{
/**
* The main method creates a frame, arranges to handle its closing,
* packs it and pops it up.
**/
public static void main(String[] args) {
Frame f = new StringCutAndPaste();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
f.pack();
f.show();
}
/** The text field that holds the text that is cut or pasted */
TextField field;
/**
* The constructor builds a very simple test GUI, and registers this object
* as the ActionListener for the buttons
**/
public StringCutAndPaste() {
this.setFont(new Font("SansSerif", Font.PLAIN, 14)); // Use a nice font
// Set up the Cut button
Button cut = new Button("Cut");
cut.addActionListener(this);
cut.setActionCommand("cut");
this.add(cut, "West");
// Set up the Paste button
Button paste = new Button("Paste");
paste.addActionListener(this);
paste.setActionCommand("paste");
this.add(paste, "East");
// Set up the text field that they both operate on
field = new TextField();
this.add(field, "North");
}
/**
* Clicking on one of the buttons invokes this method, which in turn
* invokes either the cut() or the paste() method
**/
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd.equals("cut")) cut();
else if (cmd.equals("paste")) paste();
}
/**
* This method takes the current contents of the text field, creates a
* StringSelection object to represent that string, and puts the
* StringSelection onto the clipboard
**/
public void cut() {
// Get the currently displayed value
String s = field.getText();
// Create a StringSelection object to represent it.
// This is a big convenience, because StringSelection implements both
// the Transferable interface and the ClipboardOwner. We don't have
// to deal with either of them.
StringSelection ss = new StringSelection(s);
// Now set the StringSelection object as the contents of the clipboard
// Also set it as the owner of the clipboard.
this.getToolkit().getSystemClipboard().setContents(ss, ss);
}
/**
* This method does the reverse. It gets the contents of the clipboard,
* then asks for them to be converted to a string, then displays the
* string.
**/
public void paste() {
// Get the clipboard
Clipboard c = this.getToolkit().getSystemClipboard();
// Get the contents of the clipboard, as a Transferable object
Transferable t = c.getContents(this);
// Ask for the transferable data in string form, using the predefined
// string DataFlavor. Then display that string in the field.
try {
String s = (String) t.getTransferData(DataFlavor.stringFlavor);
field.setText(s);
}
// If anything goes wrong with the transfer, just beep and do nothing.
catch (Exception e) {
this.getToolkit().beep();
return;
}
}
}
|