import com.informagen.MacClipboard;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.Frame;
import java.awt.Event;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
public class ClipboardTest extends Frame implements ClipboardOwner {
public static void main(String[] args) {
ClipboardTest cbt = new ClipboardTest();
cbt.resize(400, 350);
cbt.show();
}
private Clipboard clipboard;
private final TextArea copyTo = new TextArea(3, 25);
private final ImageComponent theImageComponent = new ImageComponent();
private final Button pasteBtn = new Button("Paste From System Clipboard");
ClipboardTest() {
clipboard = getToolkit().getSystemClipboard();
buildUI();
wireUI();
}
void buildUI() {
setLayout(new BorderLayout());
add(new Label("Use Shift-Command-4, then hold the Control to get a PICT onto the clipboard"), BorderLayout.NORTH);
add(copyTo, BorderLayout.WEST);
add(theImageComponent, BorderLayout.EAST);
add(pasteBtn, BorderLayout.SOUTH);
}
void wireUI() {
// Paste button listener
pasteBtn.addActionListener(new PasteListener());
// Window listeners, ie Close box
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
dispose();
}
});
}
public void lostOwnership(Clipboard clip, Transferable transferable) {}
class PasteListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
Transferable contents = clipboard.getContents(this);
// Determine if data is available in java.lang.String flavor
// NB: if there is a PICT on the clipboard 'contents' will be null.
if ( ( contents != null) && contents.isDataFlavorSupported(DataFlavor.stringFlavor) ) {
try {
String string = (String) contents.getTransferData(DataFlavor.stringFlavor);
copyTo.setText(string);
} catch(Exception e) {
e.printStackTrace();
}
} else {
if ( MacClipboard.isMacintosh() ) {
Image anImage = MacClipboard.getImage();
if (anImage != null)
theImageComponent.setImage(anImage);
}
}
}
}
}
class ImageComponent extends Component {
Image theImage;
ImageComponent() {}
public void setImage(Image inImage) {
theImage = inImage;
repaint();
}
public Dimension getPreferredSize() {
return new Dimension(200,0);
}
public void paint(Graphics g) {
Dimension size = getSize();
if ( theImage != null)
g.drawImage(theImage, (size.width-theImage.getWidth(this))/2,
(size.height-theImage.getHeight(this))/2, this );
}
}