192 votes

Copie de texte dans le presse-papiers à l'aide de Java

Je veux copier le texte d'un JTable dans le presse-papiers, ce qui permet de la coller dans d'autres programmes tels que Microsoft Word. J'ai le texte de la cellule JTable mais je ne sais pas comment le copier dans le presse-papiers.

347voto

LouwHopley Points 2388

Cela fonctionne pour moi et c'est assez simple :

Importez-les :

import java.awt.datatransfer.StringSelection;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;

Et puis mettez ce bout de code là où vous voulez modifier le presse-papiers :

String myString = "This text will be copied into clipboard";
StringSelection stringSelection = new StringSelection(myString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);

1 votes

Nous pouvons aussi utiliser setContents() avec le propriétaire. stackoverflow.com/questions/3591945/

0 votes

@AquariusPower Il semble que le fait de passer stringSelection comme 2ème argument de setContents(..) également, ce qui en fait le ClipboardOwner comme dans la réponse en lien, n'a pas d'importance : si l'on regarde l'élément source l'unique méthode de ClipboardOwner qu'il met en œuvre, à savoir , lostOwnership(..) est vide. Ainsi, le deuxième argument semble être un rappel complètement optionnel.

0 votes

@EvgeniSergeev cela pourrait être utile si nous étendons StringSelection :)

34voto

Wesos de Queso Points 446

Il s'agit de la réponse acceptée, écrite de manière décorative :

Toolkit.getDefaultToolkit()
        .getSystemClipboard()
        .setContents(
                new StringSelection(txtMySQLScript.getText()),
                null
        );

21voto

BullyWiiPlaza Points 5382

La classe suivante vous permet de copier/coller une chaîne de caractères vers/depuis le presse-papiers.

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();
    }
}

9voto

prasadg Points 539

Pour JavaFx les applications basées sur la technologie.

        //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());
        }

Contenu du presse-papiers peut sauvegarder des données multiples dans plusieurs formats de données comme (html, url, texte brut, image).

Pour plus d'informations, voir documentation officielle

3voto

ElementCodez Points 19

J'ai trouvé un meilleur moyen de le faire, de sorte que vous pouvez obtenir une entrée à partir d'une boîte de texte ou avoir quelque chose à générer dans cette boîte de texte et être en mesure de cliquer sur un bouton pour le faire !

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X