Copy/Cut/Paste con el Clipboard del sistema para campos de texto

De ChuWiki
Saltar a: navegación, buscar

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


Artículos relacionados