【发布时间】:2011-06-16 18:47:21
【问题描述】:
我想编写一个带有按钮的 Java 程序。当按下按钮时,它会将系统剪贴板的内容粘贴/拖放到当前在任意、可能是非 Java 应用程序(例如 MS Word)中具有焦点的文本字段。本质上,按钮动作必须以某种方式模拟 CTRL-V(粘贴)动作的发送。
大家有什么建议吗?
【问题讨论】:
我想编写一个带有按钮的 Java 程序。当按下按钮时,它会将系统剪贴板的内容粘贴/拖放到当前在任意、可能是非 Java 应用程序(例如 MS Word)中具有焦点的文本字段。本质上,按钮动作必须以某种方式模拟 CTRL-V(粘贴)动作的发送。
大家有什么建议吗?
【问题讨论】:
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() );
【讨论】: