Para poder copiar y pegar desde el portapapeles del sistema con java vamos a hacer uso de de las siguientes clases e interfaz, por lo cual va a ser necesario importarlas:
- import java.awt.Toolkit;
- import java.awt.datatransfer.Clipboard;
- import java.awt.datatransfer.DataFlavor;
- import java.awt.datatransfer.StringSelection;
- import java.awt.datatransfer.Transferable
- import java.awt.datatransfer.UnsupportedFlavorException
- import java.io.IOException
Copiar
Procedimiento
Lo primero que debemos hacer para copiar del portapapeles es acceder al método de clase de toolkit getDefaultToolkit:
- public static Toolkit getDefaultToolkit()
- Obtiene el kit de herramientas por defecto del sistema.
- Arroja
- AWTError
Luego debemos llamar a otro método de esta clase, getSystemClipboard:
- public abstract Clipboard getSystemClipboard() throws HeadlessException
- Obtiene una instancia de la clase ClipBoard la cual se comunica con el portapapeles del sistema.
- Arroja
- HeadlessException
Ahora usaremos un método de la clase ClipBoard que devuelve una instancia de la clase Transferable:
-
public Transferable getContents(Object requestor)
- Devuelve un objeto 'transferible' que representa el contenido actual del portapapeles.
- Parámetros:
- el objeto que solicita los datos del clip (no se utiliza, en su lugar usamos null)
- Devuelve
- Una instancia de la interfaz Transferable, las clases que la implementan:
Proximo paso es usar el método de la interfaz transferable, getTransferData:
-
Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException,
IOException
- Devuelve un objeto que representa los datos a transferir.
- Devuelve
- un objeto de la clase object que luego castearemos a String
- Parámetros:
- Una constante de DataFlavor que representa un String unicode en java
- Arroja:
Por ultimo, como me resulta mas facil, casteo el Objet a String
Toolkit tool = Toolkit.getDefaultToolkit(); Clipboard clip = tool.getSystemClipboard(); Transferable trans = clip.getContents(null); Object objeto = trans.getTransferData(DataFlavor.stringFlavor); String str = (String) objeto;
De igual manera podemos ahorranos unos pasos, pero para mi es menos claro como se suceden las cosas realmente, en la practica no importará como se llegue al resultado.
Pegar
Procedimiento
Primer paso (no tan obvio) debemos tener nuestro String o cualquiera objeto que podamos llevarlo a string para pasarselo por parámetro del constructor del StringSelection
Ahora creamos el objeto de la clase StringSelection desde su único constructor:
- public StringSelection(String data)
- Crea un objeto de la clase
- Recibe por parámetro la cadena de texto a pegar en el portapapeles.
Lo siguiente, es repetir los pasos:
- crear el kit de herramientas por defecto del sistemas
- este objeto llamará al método getSystemClipBoard() y devolvera un clipBoard
- este nuevo objeto quien llamará al método set para modificar el portapales:
Será el objeto de la clase ClipBoard que lamé a su método sin retorno pasando el StringSelection como parametro:
- public void setContents(Transferable contents, ClipboardOwner owner)
- Establece el contenido actual del portapapeles al objeto transferable especificado y registra el dueño del portapapeles como el propietario de los nuevos contenidos.
- Parámetros:
- Transferable contents - El contenido del objeto transferibles que representa el contenido del portapapeles.
ClipBoardOwner owner - el objeto que posee el contenido del portapapeles, o null si no es nadie.
String aPegar = "Este es el texto a pegar en el portapapeles"; StringSelection ss = new StringSelection(aPegar); Toolkit tool = Toolkit.getDefaultToolkit(); Clipboard clip = tool.getSystemClipboard(); clip.setContents(ss, null);
public void pegarPortapapeles(String pegado){ StringSelection ss = new StringSelection(pegado); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null); } public String copiarPortapapeles() throws UnsupportedFlavorException, IOException { Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); String copiado = (String) t.getTransferData(DataFlavor.stringFlavor); return copiado; }
No hay comentarios:
Publicar un comentario