Copy/Cut/Paste con el Clipboard del sistema para campos de texto
Vamos a hacer aquí un ejemplo de botones de copy, cut y paste para comunicar nuestros componentes java de texto con el portapapeles (Clipboard) del sistema.
Antes de nada, saber que las acciones de copy, cut y paste para componentes de texto ya las tiene implementadas java, por lo que símplemente debemos instanciarlas y añadirlas al botón de queramos. Estas acciones trabajan ya con el portapapeles (Clipboard) del sistema. Dichas acciones están disponibles dentro de DefaultEditorKit, en las subclases DefaultEditorKit.CopyAction, DefaultEditorKit.CutAction y DefaultEditorKit.PasteAction. Simplemente las instanciamos y las metemos en los JButton, JMenuItem, ... que queramos.
// Boton copy JButton botonCopy = new JButton(new DefaultEditorKit.CopyAction()); botonCopy.setText("copy"); // Boton paste JButton botonPaste = new JButton(new DefaultEditorKit.PasteAction()); botonPaste.setText("paste"); // Boton cut JButton botonCut = new JButton(new DefaultEditorKit.CutAction()); botonCut.setText("cut");
Estos botones funcionarán correctamente sobre el campo de texto que tenga el foco en el momento de pulsarlos.
Veamos un ejemplo completo, en el que mostramos estos tres botones y un JTextField en una ventana
package com.chuidiang.ejemplos.clipboard; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.WindowConstants; import javax.swing.text.DefaultEditorKit; /** * Ejemplo de uso del Clipboard del sistema para campos de texto. * Se usan las acciones de copy/cut/paste por defecto del DefaultEditorKit, validas * para componentes de texto. * @author chuidiang * */ public class EjemploClipboard { /** Crea una ventana con tres botones copy/cut/paste y un campo de texto * * @param args */ public static void main(String[] args) { // Se crea la ventana y el componente de texto JFrame v = new JFrame("Ejemplo clipboard"); v.getContentPane().setLayout(new FlowLayout()); JTextField campoTexto = new JTextField(20); // Boton copy JButton botonCopy = new JButton(new DefaultEditorKit.CopyAction()); botonCopy.setText("copy"); // Boton paste JButton botonPaste = new JButton(new DefaultEditorKit.PasteAction()); botonPaste.setText("paste"); // Boton cut JButton botonCut = new JButton(new DefaultEditorKit.CutAction()); botonCut.setText("cut"); // Se construye la ventana v.getContentPane().add(botonCopy); v.getContentPane().add(botonCut); v.getContentPane().add(botonPaste); v.getContentPane().add(campoTexto); // y se visualiza v.pack(); v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); v.setVisible(true); } }