Clipboard copy and paste

Here's a demonstration of how to move text to and from the Clipboard.

In Java, there are actually two kinds of Clipboard - system and local. The following example uses the system Clipboard. It corresponds to the usual idea of sharing data between otherwise independent applications running on the same computer.

Local Clipboards are visible only within a single Java application. They are created by simply passing a name to the Clipboard constructor.

import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.Toolkit;
import java.io.*;

public final class TextTransfer implements ClipboardOwner {

  /** Simple test harness. */
  public static void main(String...  args){
    TextTransfer textTransfer = new TextTransfer();

    //display what is currently on the clipboard
    log("Clipboard contains:" + textTransfer.getClipboardContents());

    //change the contents and then re-display
    textTransfer.setClipboardContents("blah, blah, blah");
    log("Clipboard contains:" + textTransfer.getClipboardContents());
  }

   /**
   * Empty implementation of the ClipboardOwner interface.
   */
   @Override public void lostOwnership(Clipboard clipboard, Transferable contents){
     //do nothing
   }

  /**
  * Place a String on the clipboard, and make this class the
  * owner of the Clipboard's contents.
  */
  public void setClipboardContents(String string){
    StringSelection stringSelection = new StringSelection(string);
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents(stringSelection, this);
  }

  /**
  * Get the String residing on the clipboard.
  *
  * @return any text found on the Clipboard; if none found, return an
  * empty String.
  */
  public String getClipboardContents() {
    String result = "";
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    //odd: the Object param of getContents is not currently used
    Transferable contents = clipboard.getContents(null);
    boolean hasTransferableText =
      (contents != null) &&
      contents.isDataFlavorSupported(DataFlavor.stringFlavor)
    ;
    if (hasTransferableText) {
      try {
        result = (String)contents.getTransferData(DataFlavor.stringFlavor);
      }
      catch (UnsupportedFlavorException | IOException ex){
        System.out.println(ex);
        ex.printStackTrace();
      }
    }
    return result;
  }
  
  private static void log(String msg) {
    System.out.println(msg);
  }
} 

An example run of this class:

>java -cp . TextTransfer
Clipboard contains:Java is in Indonesia.

Clipboard contains:blah, blah, blah

>