Java Copiar texto al portapapeles

Mohd Mohtashim Nawaz 12 octubre 2023
  1. Cree una instancia de portapapeles usando la clase Toolkit y Clipboard en Java
  2. Copie la cadena al portapapeles usando la clase StringSelection en Java
  3. Copiar texto al portapapeles en aplicaciones JavaFX
Java Copiar texto al portapapeles

Este artículo trata sobre cómo copiar el texto de una aplicación Java al portapapeles.

Java proporciona varios elementos que muestran el texto en una aplicación Java. Varias veces, el texto debe copiarse en el portapapeles para exportarlo a otras aplicaciones informáticas.

Cree una instancia de portapapeles usando la clase Toolkit y Clipboard en Java

Java proporciona una superclase llamada Toolkit que contiene una variedad de métodos para implementar las funcionalidades basadas en GUI en Java.

La clase tiene un método estático llamado getDefaultToolkit() que devuelve una instancia predeterminada de la clase Toolkit. La definición del método se da a continuación.

public static Toolkit getDefaultToolkit()

Una vez que obtenga la instancia predeterminada de Toolkit, puede usarla para invocar más el método getSystemClipboard(). Este método abstracto devuelve una instancia única del portapapeles del sistema.

La definición del método getSystemClipboard() se da a continuación.

public abstract Clipboard getSystemClipboard()
                                      throws HeadlessException

El método lanza una excepción llamada HeadlessException que representa la bandera sin cabeza en la aplicación.

Una vez que obtenga la instancia del portapapeles, estará listo para copiar el texto en el portapapeles.

Copie la cadena al portapapeles usando la clase StringSelection en Java

Después de obtener la instancia del portapapeles, la siguiente tarea es hacer que la cadena esté lista para copiarse en el portapapeles. Puede hacerlo utilizando la clase StringSelection.

La clase StringSelection implementa la funcionalidad para transferir una cadena en formato de texto simple. Esta clase es una subclase de la clase java.awt.datatransfer.

Para crear una instancia de la clase StringSelection, debe pasar la cadena que se copiará al constructor de la clase.

Finalmente, cuando la instancia esté lista, puede llamar al método setContent() del portapapeles que copia su cadena en el portapapeles del sistema. El método setContent() acepta dos argumentos.

  • El primer argumento es una instancia transferible que, en nuestro caso, es la instancia de la clase StringSelection.
  • El segundo argumento indica el propietario del portapapeles.

Veamos el código.

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

public class CopyToClipBoard {
  public static void main(String[] args) {
    String str = "To be copied";
    Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
    StringSelection strSel = new StringSelection(str);

    cb.setContents(strSel, null);
  }
}

Copiar texto al portapapeles en aplicaciones JavaFX

Las aplicaciones JavaFX son un poco diferentes a las aplicaciones AWT y Swing. Puede usar una funcionalidad similar con un poco de cambio para mostrar el contenido HTML mientras trabaja con aplicaciones JavaFX.

En lugar de colocar el contenido directamente en el portapapeles, puede establecer el contenido en la instancia ClipboardContent. Una vez que el contenido se envía a la instancia, puede agregar directamente esa instancia al portapapeles.

De manera similar, mientras lee el contenido, puede diferenciar entre el texto normal y el contenido HTML usando la bandera DataFormat.HTML.

Veamos el ejemplo en código.

public class CopyToClipBoard {
  Clipboard cb = Clipboard.getSystemClipboard();

  ClipboardContent ct = new ClipboardContent();

  ct.putString("Text to be copied");
  ct.putHtml("<b>HTML Text</b>");

  cb.setContent(ct);

  if (cb.hasContent(DataFormat.HTML)) {
    System.out.println(cb.getHtml());
  }
  if (cb.hasString()) {
    System.out.println(cb.getString());
  }
}

Se trata de copiar el contenido de una aplicación Java al portapapeles del sistema.

Artículo relacionado - Java JavaFX