Quiero copiar el texto de una JTable
celda al portapapeles, de modo que esté disponible para pegarlo en otros programas como Microsoft Word. Tengo el texto del JTable
, pero no estoy seguro de cómo copiarlo en el portapapeles.
Quiero copiar el texto de una JTable
celda al portapapeles, de modo que esté disponible para pegarlo en otros programas como Microsoft Word. Tengo el texto del JTable
, pero no estoy seguro de cómo copiarlo en el portapapeles.
Respuestas:
Esto funciona para mí y es bastante simple:
Importar estos:
import java.awt.datatransfer.StringSelection;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
Y luego coloque este fragmento de código donde quiera alterar el portapapeles:
String myString = "This text will be copied into clipboard";
StringSelection stringSelection = new StringSelection(myString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);
stringSelection
como el segundo argumento setContents(..)
también, convirtiéndolo en ClipboardOwner
, como en la respuesta vinculada, no tiene importancia: mirando la fuente , el único método ClipboardOwner
que implementa, es decir lostOwnership(..)
, está vacío. Entonces, el segundo argumento parece ser una devolución de llamada completamente opcional.
(-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))
Esta es la respuesta aceptada escrita de manera decorativa:
Toolkit.getDefaultToolkit()
.getSystemClipboard()
.setContents(
new StringSelection(txtMySQLScript.getText()),
null
);
La siguiente clase le permite copiar / pegar una Cadena en / desde el portapapeles.
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
mejor en caso de que no funcione correctamente
VK_CONTROL
por VK_META
si es macOS.
Encontré una mejor manera de hacerlo para que pueda obtener una entrada de un cuadro de texto o hacer que se genere algo en ese cuadro de texto y poder hacer clic en un botón para hacerlo.
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
Para aplicaciones basadas en 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());
}
Portapapeles puede guardar múltiples datos en varios formatos de datos como (html, url, texto plano, imagen).
Para más información ver documentación oficial