我想将一个 JTable
的单元格中的文本复制到剪贴板,以便可以将其粘贴到其他程序中,如 Microsoft Word。我已经获取了 JTable
中的文本,但不确定如何将其复制到剪贴板。
这对我来说很有效,而且非常简单:
导入这些内容:
import java.awt.datatransfer.StringSelection;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
然后将这段代码放置在您想要修改剪贴板的任何位置:
String myString = "This text will be copied into clipboard";
StringSelection stringSelection = new StringSelection(myString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);
这是一个以华丽风格书写的被接受的答案:
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
不能正常工作,请随时建议编辑以提供更好的支持。 - BullyWiiPlazaVK_CONTROL
替换为VK_META
。 - Ky -针对基于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、纯文本和图像)的多个数据。
更多信息请参见官方文档。
供参考:
static void copyToClipboard(String text) {
java.awt.Toolkit.getDefaultToolkit().getSystemClipboard()
.setContents(new java.awt.datatransfer.StringSelection(text), null);
}
我发现一种更好的方法,可以从文本框中获取输入或生成某些内容,并能够单击按钮执行它。
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
为了参考,这里是使用Clojure(与Java相关)编写的系统剪贴板copy
和paste
函数:
(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!"
stringSelection
作为第二个参数传递给setContents(..)
,并将其作为ClipboardOwner
,就像链接中的答案一样,没有任何意义:查看 源代码,它实现的ClipboardOwner
的唯一方法,即lostOwnership(..)
,是空的。因此,第二个参数似乎是一个完全可选的回调。 - Evgeni Sergeev(-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))
- NikoNyrh