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:

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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
5 years ago

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

Back to top button