java 两个窗口 贴,如何使用Java将系统剪贴板内容粘贴到任意窗口

I would like to write a Java program that has a button. When the button is pressed it pastes / drops the content of the system clipboard to the text field that currently has focus within an arbitrary, possibly non-Java app (say MS Word). Essentially the button action has to simulate the sending of CTRL-V (paste) action somehow.

Does any one have any suggestions?

解决方案

The package java.awt.datatransfer seems to be a solution, according to this article. Here is another article.

From the latter page, the needed imports:

import java.awt.datatransfer.*;

import java.awt.Toolkit;

And the method code is below. The solution is to create a listener and add it to the button. The listener should simply get the contents of the clipboard and insert it to whatever component you wish.

public void setClipboardContents( String aString ){

StringSelection stringSelection = new StringSelection( aString );

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

clipboard.setContents( stringSelection, this );

}

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 ex){

//highly unlikely since we are using a standard DataFlavor

System.out.println(ex);

ex.printStackTrace();

}

catch (IOException ex) {

System.out.println(ex);

ex.printStackTrace();

}

}

return result;

}