Botones cortar-copiar-pegar en Java

Cortar, copiar y pegar texto en Java es tarea sencilla, ello gracias a que:

  • Los componentes swing de Java ya tienen implementados las clásicas combinaciones Ctrl+x, Ctrl+c, Ctrl+v para cortar, copiar y pegar.
  • El paquete javax.swing.text.DefaultEditorKit tiene implementadas las acciones cortar, copiar y pegar. Estas acciones se pueden agregar a un JButton o un JMenuItem.

Para agregar las acciones cortar, copiar y pegar a un JButton o un JMenuItem, hay que instanciar estos objetos, pasando al constructor de los mismos, el objeto Action devuelto por los métodos CutAction, CopyAction y PasteAction de la clase DefaultEditorKit.

buttonCortar = new JButton( new DefaultEditorKit.CutAction() );
buttonCopiar = new JButton( new DefaultEditorKit.CopyAction() );
buttonPegar = new JButton( new DefaultEditorKit.PasteAction() );

Cabe aclarar, que estas acciones funcionarán sobre el componente de texto que tenga el foco en el momento de presionar el botón.

Para finalizar, un ejemplito completo:

import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.Rectangle;
import javax.swing.JButton;
import javax.swing.text.DefaultEditorKit;

public class Test_CopyCutPaste extends JFrame {

    private static final long serialVersionUID = 1L;

    private JPanel jContentPane = null;

    private JTextArea textArea = null;

    private JButton buttonCopiar = null;

    private JButton buttonCortar = null;

    private JButton buttonPegar = null;

    private JTextArea getTextArea() {
        if (textArea == null) {
            textArea = new JTextArea();
            textArea.setBounds(new Rectangle(9, 49, 217, 98));
        }
        return textArea;
    }

    private JButton getButtonCopiar() {
        if (buttonCopiar == null) {
            buttonCopiar = new JButton( new DefaultEditorKit.CopyAction() );
            buttonCopiar.setBounds(new Rectangle(87, 16, 63, 23));
            buttonCopiar.setText("Copiar");
        }
        return buttonCopiar;
    }

    private JButton getButtonCortar() {
        if (buttonCortar == null) {
            buttonCortar = new JButton( new DefaultEditorKit.CutAction() );
            buttonCortar.setBounds(new Rectangle(12, 16, 63, 23));
            buttonCortar.setText("Cortar");
           
        }
        return buttonCortar;
    }

    private JButton getButtonPegar() {
        if (buttonPegar == null) {
            buttonPegar = new JButton( new DefaultEditorKit.PasteAction() );
            buttonPegar.setBounds(new Rectangle(162, 16, 63, 23));
            buttonPegar.setText("Pegar");
        }
        return buttonPegar;
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Test_CopyCutPaste thisClass = new Test_CopyCutPaste();
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                thisClass.setVisible(true);
            }
        });
    }

    public Test_CopyCutPaste() {
        super();
        initialize();
    }

    private void initialize() {
        this.setSize(246, 200);
        this.setName("frameBase");
        this.setContentPane(getJContentPane());
        this.setTitle("Test Cut/Copy/Paste");
    }

    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getTextArea(), null);
            jContentPane.add(getButtonCopiar(), null);
            jContentPane.add(getButtonCortar(), null);
            jContentPane.add(getButtonPegar(), null);
        }
        return jContentPane;
    }

}


Vía: Chuidilang

6 comentario en este artículoDeje el suyo
  1. Hola estoy haciendo un bloc de nota pero no se como configurar los botones cortar, pegar , copiar e imprimir.
    Pero el proyecto lo estoy haciendo en Netbeans y ya tengo los botones solo me hace falta configurarlos.
    Si pueden ayudarme, le agradeceria mucho

  2. Muy bueno, me ayudo bastante. que bueno que java simplifica muchas cosas.

  3. Ahi varias lineas que no entiedo…
    podrias explicar el manejo de eventos gracias. yo tambien estoy haciendo un tipo bloc de notas_

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.text.DefaultEditorKit; //copy + paste

    public class EditorSimple extends JFrame{
    private JButton botonCopiar;
    private JButton botonCortar;
    private JButton botonPegar;
    private JLabel barraEstado;
    private JTextArea areaTexto;

    //elementos de la barra menu
    private JMenuBar barra;
    private JMenu archivo;
    private JMenuItem abrir;
    private JMenuItem grabar;

    public EditorSimple(){
    super(“Super editor TAP”);
    this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    this.addWindowListener(new CerrarListener());
    inicializarMenu();
    inicializarComponentes();

    }
    private void inicializarMenu(){
    barra= new JMenuBar();
    archivo =new JMenu(“Archivo”);
    barra.add(archivo);

    abrir= new JMenuItem(“Abrir”);
    abrir.addActionListener(new AbrirListener());//agregamos el listener
    archivo.add(abrir);

    grabar= new JMenuItem(“Grabar”);
    archivo.add(grabar);

    this.setJMenuBar(barra);
    }
    private void inicializarComponentes(){
    Container contentPane= this.getContentPane();
    contentPane.setLayout(new BorderLayout());

    barraEstado =new JLabel(“Bienvenido – Listo”);
    contentPane.add(barraEstado);

    areaTexto = new JTextArea();
    JScrollPane scroller = new JScrollPane(areaTexto);
    contentPane.add(scroller, BorderLayout.CENTER);

    JPanel panelNorte =new JPanel();
    panelNorte.setLayout (new FlowLayout(FlowLayout.LEFT));
    botonCopiar = new JButton(new DefaultEditorKit.CopyAction());
    botonCopiar.setText(“Copiar”);
    panelNorte.add(botonCopiar);
    botonCortar = new JButton(new DefaultEditorKit.CutAction());
    botonCortar.setText(“Cortar”);
    panelNorte.add(botonCortar);
    botonPegar = new JButton(new DefaultEditorKit.PasteAction());
    botonPegar.setText(“Pegar”);
    panelNorte.add(botonPegar);
    contentPane.add(panelNorte, BorderLayout.NORTH);

    this.pack();
    this.setSize(350,390);
    }
    class AbrirListener implements ActionListener{
    public void actionPerformed(ActionEvent ev){
    abrirClick();
    }
    }
    private void abrirClick(){
    JFileChooser chooser= new JFileChooser();
    int respuesta = chooser.showOpenDialog(this);
    if(respuesta == JFileChooser.APPROVE_OPTION){
    File archivo = chooser.getSelectedFile();
    abrirArchivo(archivo);

    }
    }
    private void abrirArchivo(File archivo){
    //este metodo lee un archivo y lo deja en el area de texto para que se le
    //pueda editar

    try{
    BufferedReader br= new BufferedReader(new FileReader(archivo));
    String linea =br.readLine();
    while (linea!=null){
    areaTexto.append(linea + “\n”);
    linea= br.readLine();
    }
    br.close();
    }catch (IOException ex){
    System.err.println(“problemas al leer el archivo”+ ex);
    }
    }

    //eventos de ventana
    //hoy vamos por el mas importante de todos. CERRAR
    //asi como existen action listener para los botones, existe Windows Listener
    //para las ventanas. el problema es que windndows listener es una interfaz mas
    //compleja, que inclute varios metodos. para hacer la vida mas facil, existe
    //una clase, windows adapter, de la que podemos heredar pafra modificar el comportamiento
    //de la ventana solo en lo que nos combiene

    class CerrarListener extends WindowAdapter{
    public void windowsClosing(WindowEvent ev){
    cerrandoVentana();

    }
    }
    private void cerrandoVentana(){
    int opcion =JOptionPane.showConfirmDialog(this, “¿esta seguro de salir?”,
    “confirma”, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
    if(opcion==JOptionPane.YES_OPTION){
    this.dispose();
    System.exit(0);
    }
    }
    public static void main (String []arx){

    JFrame ventana = new EditorSimple();
    ventana.setVisible(true);

    }
    }

  4. Milllllllllll Gracias Hermano Me has sacado de un gran apuro con esto!!!!!

  5. muy bueno, gracias por este tutorial

  6. porque me marca un erro en la linea 9 con class?

Deje su comentario

Por favor, ingrese su nombre

Por favor, ingrese un correo-e válido

Por favor, ingrese su mensaje

luauf.com 2012

WordPress