我想编写一个带有按钮的Java程序。按下按钮时,它将系统剪贴板的内容粘贴到当前具有焦点的文本字段中,该文本字段位于任意的,可能不是非Java的应用程序(如MS Word)中。本质上,按钮动作必须模拟CTRL-V(粘贴)动作的发送。如何使用Java从系统剪贴板内容粘贴到任意窗口
有没有人有任何建议?
我想编写一个带有按钮的Java程序。按下按钮时,它将系统剪贴板的内容粘贴到当前具有焦点的文本字段中,该文本字段位于任意的,可能不是非Java的应用程序(如MS Word)中。本质上,按钮动作必须模拟CTRL-V(粘贴)动作的发送。如何使用Java从系统剪贴板内容粘贴到任意窗口
有没有人有任何建议?
包java.awt.datatransfer
似乎是一个解决方案,according to this article。这里是another article。
从后者页面,所需的进口:
import java.awt.datatransfer.*;
import java.awt.Toolkit;
,并且该方法的代码如下。解决方案是创建一个监听器并将其添加到按钮。监听器应该简单地获取剪贴板的内容并将其插入到任何你希望的组件中。
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;
}
使用通过编辑器工具包中提供的操作:
JButton paste = new JButton(new DefaultEditorKit.PasteAction());