datatransfer

Getting and setting text on the system clipboard

With this example we are going to see how to get and set the text on the system clipboard. This is a very common feature that we all use every day when working on a computer. The most common use of this is when we perform text copy/paste operations. Using this example you can embed this operations in you own app, making it possible for the user to copy the text he wants in the clipboard and use it as he wishes.

Basically to set and get the text on the system clipboard, one should perform the following steps:

  • Create a new ActionListener instance.
  • Override actionPerformed to customize the handling of a specific event.
  • Use Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null) call to get the contents of the System clipboard.
  • Use Toolkit.getDefaultToolkit().getSystemClipboard().setContents(StringSelection str, null) to set the contents of the System clipboard.

Let’s take a look at the code snippets that follow:

package com.javacodegeeks.snippets.desktop;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

public class ClipdoardUsage {

  public static void main(String[] args) {

    // Create a frame
    Frame frame = new Frame("Example Frame");

    /*

* Create a container with a flow layout, which arranges its children 

* horizontally and center aligned.

* A container can also be created with a specific layout using

* Panel(LayoutManager) constructor, e.g.

* Panel(new FlowLayout(FlowLayout.RIGHT)) for right alignment

*/
    Panel panel = new Panel();

    // Add a text area in the center of the frame
    final TextArea textArea = new TextArea("This is a sample text...");
    frame.add(textArea, BorderLayout.CENTER);

    // Add several buttons to the container
    Button copyToClipboardButton = new Button("Copy to clipboard");
    Button pasteFromClipboardButton = new Button("Paste from clipboard");
    panel.add(copyToClipboardButton);
    panel.add(pasteFromClipboardButton);

    // Add action listener to copyToClipboardButton for copying textArea content to clipboard
    copyToClipboardButton.addActionListener(new ActionListener() {

  @Override

  public void actionPerformed(ActionEvent evt) {

setStringToClipboard(textArea.getText());

  }
    });

    // Add action listener to pasteFromClipboardButton for pasting clipboard content to textArea
    pasteFromClipboardButton.addActionListener(new ActionListener() {

  @Override

  public void actionPerformed(ActionEvent evt) {

textArea.setText(getStringFromClipboard());

  }
    });

    // Add the container to the bottom of the frame
    frame.add(panel, BorderLayout.SOUTH);

    // Display the frame
    int frameWidth = 300;
    int frameHeight = 300;
    frame.setSize(frameWidth, frameHeight);

    frame.setVisible(true);

  }

  // If a string is on the system clipboard, this method returns it; otherwise it returns null.
  public static String getStringFromClipboard() {
    Transferable transferable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);

    try {

  if (transferable != null && transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {

String text = (String) transferable.getTransferData(DataFlavor.stringFlavor);

return text;

  }
    } catch (UnsupportedFlavorException e) {

  System.out.println("Clipboard content flavor is not supported " + e.getMessage());
    } catch (IOException e) {

  System.out.println("Clipboard content could not be retrieved " + e.getMessage());
    }
    return null;
  }

  // This method writes a string to the clipboard.
  public static void setStringToClipboard(String stringContent) {
    StringSelection stringSelection = new StringSelection(stringContent);
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
  }

}

 
This was an example on getting and setting text on the system clipboard in a Java Desktop Application.

Byron Kiourtzoglou

Byron is a master software engineer working in the IT and Telecom domains. He is an applications developer in a wide variety of applications/services. He is currently acting as the team leader and technical architect for a proprietary service creation and integration platform for both the IT and Telecom industries in addition to a in-house big data real-time analytics solution. He is always fascinated by SOA, middleware services and mobile development. Byron is co-founder and Executive Editor at Java Code Geeks.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Deepali Walia
4 years ago

How can I disable copying text, In JAVA ???

Back to top button