【发布时间】:2011-10-06 07:46:33
【问题描述】:
我想将文本从JTable 的单元格复制到剪贴板,以便将其粘贴到其他程序中,例如 Microsoft Word。我有来自JTable 的文本,但我不确定如何将其复制到剪贴板。
【问题讨论】:
我想将文本从JTable 的单元格复制到剪贴板,以便将其粘贴到其他程序中,例如 Microsoft Word。我有来自JTable 的文本,但我不确定如何将其复制到剪贴板。
【问题讨论】:
这对我有用,而且非常简单:
导入这些:
import java.awt.datatransfer.StringSelection;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
然后将这段 sn-p 代码放在您想要更改剪贴板的任何位置:
String myString = "This text will be copied into clipboard";
StringSelection stringSelection = new StringSelection(myString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);
【讨论】:
stringSelection 作为setContents(..) 的第二个参数传递,使其成为ClipboardOwner,如链接的答案一样,没有意义:查看source ,它实现的ClipboardOwner的唯一方法,即lostOwnership(..),是空的。所以,第二个参数似乎是一个完全可选的回调。
(-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))
这是以装饰方式编写的公认答案:
Toolkit.getDefaultToolkit()
.getSystemClipboard()
.setContents(
new StringSelection(txtMySQLScript.getText()),
null
);
【讨论】:
以下类允许您将字符串复制/粘贴到剪贴板。
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();
}
}
【讨论】:
OS X,以防它无法正常工作
VK_CONTROL 换成VK_META。
适用于基于 JavaFx 的应用程序。
//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可以以多种数据格式保存多个数据,例如(html、url、纯文本、图像)。
欲了解更多信息,请参阅official documentation
【讨论】:
我找到了一种更好的方法,这样您就可以从 txtbox 获取输入,或者在该文本框中生成一些内容,然后单击按钮来执行此操作。!
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
【讨论】:
供参考:
static void copyToClipboard(String text) {
java.awt.Toolkit.getDefaultToolkit().getSystemClipboard()
.setContents(new java.awt.datatransfer.StringSelection(text), null);
}
【讨论】: