ฉันต้องการคัดลอกข้อความจากJTable
เซลล์ไปยังคลิปบอร์ดทำให้สามารถวางลงในโปรแกรมอื่นเช่น Microsoft Word ฉันได้รับข้อความจากJTable
แต่ฉันไม่แน่ใจว่าจะคัดลอกไปยังคลิปบอร์ดได้อย่างไร
ฉันต้องการคัดลอกข้อความจาก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);
stringSelection
เป็นอาร์กิวเมนต์ที่ 2 ไปsetContents(..)
ด้วยทำให้ClipboardOwner
เป็นเช่นเดียวกับในคำตอบที่เชื่อมโยงไม่มีความสำคัญ: ดูที่แหล่งที่มาวิธีการเพียงอย่างเดียวของClipboardOwner
ที่มันดำเนินการคือlostOwnership(..)
ว่างเปล่า ดังนั้นข้อโต้แย้งที่ 2 น่าจะเป็นการเรียกกลับที่ไม่จำเป็นทั้งหมด
(-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))
นี่คือคำตอบที่ได้รับการยอมรับในรูปแบบการตกแต่ง:
Toolkit.getDefaultToolkit()
.getSystemClipboard()
.setContents(
new StringSelection(txtMySQLScript.getText()),
null
);
คลาสต่อไปนี้อนุญาตให้คุณคัดลอก / วาง String ไปยัง / จากคลิปบอร์ด
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
ถ้ามัน MacOS
ฉันพบวิธีที่ดีกว่าในการทำเช่นนี้เพื่อให้คุณสามารถรับอินพุตจาก 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
สำหรับแอปพลิเคชันที่ใช้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, ข้อความธรรมดา, รูปภาพ)
สำหรับข้อมูลเพิ่มเติมดูเอกสารทางการ