How do I copy to the system clipboard in/using Java on Windows 10? [duplicate]

1 week ago 20
ARTICLE AD BOX

This works for me and is quite simple:

Import these:

import java.awt.datatransfer.StringSelection; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard;

And then put this snippet of code wherever you'd like to alter the clipboard:

String myString = "This text will be copied into clipboard"; StringSelection stringSelection = new StringSelection(myString); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(stringSelection, null);

Denis Abakumov's user avatar

answered Jul 15, 2011 at 21:23

Pangolin's user avatar

7 Comments

2016-03-12T20:39:15.97Z+00:00

@AquariusPower It seems that passing stringSelection as the 2nd argument to setContents(..) too, making it the ClipboardOwner, as in the linked answer, has no significance: looking at the source, the sole method of ClipboardOwner that it implements, namely, lostOwnership(..), is empty. So, the 2nd argument seems to be a completely optional callback.

2016-06-03T03:18:10.957Z+00:00

@EvgeniSergeev it may be useful if we extend StringSelection :)

2016-06-03T18:36:27.503Z+00:00

Ported to Clojure: (-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))

2017-08-26T10:23:40.82Z+00:00

In which context did you test this? From a GUI application? On which platform? Does it work setting the clipboard 100 times in a row (with some appropriate pause between each set)?

2018-02-09T22:28:04.623Z+00:00

This is the accepted answer written in a decorative way:

Toolkit.getDefaultToolkit() .getSystemClipboard() .setContents( new StringSelection(txtMySQLScript.getText()), null );

answered Sep 21, 2017 at 21:22

Wesos de Queso's user avatar

The following class allows you to copy/paste a String to/from the clipboard.

import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import static java.awt.event.KeyEvent.*; import static org.apache.commons.lang3.SystemUtils.IS_OS_MAC; public class SystemClipboard { public static void copy(String text) { Clipboard clipboard = getSystemClipboard(); clipboard.setContents(new StringSelection(text), null); } public static void paste() throws AWTException { Robot robot = new Robot(); int controlKey = IS_OS_MAC ? VK_META : VK_CONTROL; robot.keyPress(controlKey); robot.keyPress(VK_V); robot.keyRelease(controlKey); robot.keyRelease(VK_V); } public static String get() throws Exception { Clipboard systemClipboard = getSystemClipboard(); DataFlavor dataFlavor = DataFlavor.stringFlavor; if (systemClipboard.isDataFlavorAvailable(dataFlavor)) { Object text = systemClipboard.getData(dataFlavor); return (String) text; } return null; } private static Clipboard getSystemClipboard() { Toolkit defaultToolkit = Toolkit.getDefaultToolkit(); return defaultToolkit.getSystemClipboard(); } }

answered Feb 2, 2015 at 17:55

BullyWiiPlaza's user avatar

4 Comments

May need some logic for pasting in OS X since it's special.

2015-07-29T18:02:41Z+00:00

@BenLeggiero: Late answer but feel free to suggest an edit to support OS X better in case it's not working properly

2020-02-16T00:22:05.26Z+00:00

if I ever need to do this again, I'll update. Likely, it's just checking the current OS, and swapping out VK_CONTROL for VK_META if it's macOS.

2020-02-16T22:25:47.16Z+00:00

2020-04-30T11:36:42.303Z+00:00

For JavaFx based applications.

//returns System Clipboard final Clipboard clipboard = Clipboard.getSystemClipboard(); // ClipboardContent provides flexibility to store data in different formats final ClipboardContent content = new ClipboardContent(); content.putString("Some text"); content.putHtml("<b>Some</b> text"); //this will be replaced by previous putString content.putString("Some different text"); //set the content to clipboard clipboard.setContent(content); // validate before retrieving it if(clipboard.hasContent(DataFormat.HTML)){ System.out.println(clipboard.getHtml()); } if(clipboard.hasString()){ System.out.println(clipboard.getString()); }

ClipboardContent can save multiple data in several data formats like(html,url,plain text,image).

For more information see official documentation

answered Apr 5, 2020 at 4:52

gprasadr8's user avatar

For reference:

static void copyToClipboard(String text) { java.awt.Toolkit.getDefaultToolkit().getSystemClipboard() .setContents(new java.awt.datatransfer.StringSelection(text), null); }

answered Aug 3, 2021 at 22:16

sahlaysta's user avatar

I found a better way of doing it so you can get a input from a txtbox or have something be generated in that text box and be able to click a button to do it.!

import java.awt.datatransfer.*; import java.awt.Toolkit; private void /* Action performed when the copy to clipboard button is clicked */ { String ctc = txtCommand.getText().toString(); StringSelection stringSelection = new StringSelection(ctc); Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); clpbrd.setContents(stringSelection, null); } // txtCommand is the variable of a text box

answered Dec 27, 2017 at 19:38

ElementCodez's user avatar

1 Comment

What do you mean by "2017/2018"? A particular version of Java? Which version did you use?

2018-02-09T22:18:12.13Z+00:00

For reference here are the copy and paste functions from/to the system clipboard written in Clojure (so related to Java):

(defn copy [s] (-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. s) nil))) (defn paste [] (-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.getContents nil) (.getTransferData java.awt.datatransfer.DataFlavor/stringFlavor))) (copy "Hello!") (paste) ;=> "Hello!"

answered Jan 10, 2023 at 16:52

Jérémie's user avatar

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.

Read Entire Article