Tôi muốn sao chép văn bản từ một JTable
ô vào bảng tạm, để nó có thể được dán vào các chương trình khác như Microsoft Word. Tôi có văn bản từ JTable
, nhưng tôi không chắc làm thế nào để sao chép nó vào clipboard.
Tôi muốn sao chép văn bản từ một JTable
ô vào bảng tạm, để nó có thể được dán vào các chương trình khác như Microsoft Word. Tôi có văn bản từ JTable
, nhưng tôi không chắc làm thế nào để sao chép nó vào clipboard.
Câu trả lời:
Điều này làm việc cho tôi và khá đơn giản:
Nhập những thứ này:
import java.awt.datatransfer.StringSelection;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
Và sau đó đặt đoạn mã này bất cứ nơi nào bạn muốn thay đổi bảng tạm:
String myString = "This text will be copied into clipboard";
StringSelection stringSelection = new StringSelection(myString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);
stringSelection
thành đối số thứ 2 setContents(..)
cũng vậy, làm cho nó ClipboardOwner
, như trong câu trả lời được liên kết, không có ý nghĩa gì: nhìn vào nguồn , phương thức duy nhất ClipboardOwner
mà nó thực hiện, cụ thể là, lostOwnership(..)
trống rỗng. Vì vậy, đối số thứ 2 dường như là một cuộc gọi lại hoàn toàn tùy chọn.
(-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))
Đây là câu trả lời được chấp nhận được viết theo cách trang trí:
Toolkit.getDefaultToolkit()
.getSystemClipboard()
.setContents(
new StringSelection(txtMySQLScript.getText()),
null
);
Lớp sau cho phép bạn sao chép / dán Chuỗi vào / từ bảng ghi tạm.
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
tốt hơn trong trường hợp nó không hoạt động đúng
VK_CONTROL
chỗ VK_META
nếu là macOS.
Tôi đã tìm thấy một cách tốt hơn để làm điều đó để bạn có thể nhận được đầu vào từ một txtbox hoặc có một cái gì đó được tạo trong hộp văn bản đó và có thể nhấp vào một nút để làm điều đó.!
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
Đối với các ứng dụng dựa trên 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 có thể lưu nhiều dữ liệu ở một số định dạng dữ liệu như (html, url, văn bản thuần túy, hình ảnh).
Để biết thêm thông tin xem tài liệu chính thức