Desactivar Copy/Paste JTextField

Para desactivar los eventos de teclado en una caja de texto se deben capturar las combinaciones de teclas mediante un InputMap, se define la combinación Ctrl+c y Ctrl+V de la siguiente forma;

// BLOQUEA LA ACCION COPIAR 
      InputMap map2 = jTextField4.getInputMap(jTextField4.WHEN_FOCUSED);
      map2.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.CTRL_MASK), "null");

Nota: El elemento jTextField4 es mi caja de texto.

Estás lineas de código deben ser aplicadas DESPUÉS de que tus componentes hayan sido inicializados, es decir después de ejecutar el constructor de la clase (en netbeans yo lo hago despues del método initComponents()), o al abrir el frame, o lo puedes colocar en alguna acción como un boton, menu, etc… no importa donde lo coloques solo asegurate que tus componentes ya están inicializados.

Además esto puede aplicar para cualquier componente que herede de las siguientes clases:

  • javax.swing.JComponent
  • java.awt.Component

Y así puedes desactivar los eventos para varios componentes, aquí dejo los ejemplos con las aportaciones que han dejado:

 public void disablePasteAction(JComponent[] components){

        for (JComponent campo : components){
            InputMap map = campo.getInputMap();
            map.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.CTRL_MASK), "null");
            map.put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, Event.SHIFT_MASK), "null");
        }

    }

    public void disableCopyAction(Component[] components){

        for (Component campo : components){

            if(campo instanceof JComponent){
                InputMap map = ((JComponent)campo).getInputMap();
                map.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK), "null");
            }
        }
    }

 // por ejemplo lo puedes invocar de esta forma:
        Component[] components =jPanel1.getComponents();
        disableCopyAction(components);
        disablePasteAction((JComponent[])components);

Saludos

13 comentarios en “Desactivar Copy/Paste JTextField

  1. AnyMa dijo:

    GENIAL!!! GRACIAS !!! Funcionó a la perfección. De paso me hice un método para pasarle parámetros variables y que lo haga para todos ellos. Les paso el código, por si a alguien le interesa:

    inhabilitaPegar(fld_Codigo, fld_FechaAlta, fld_Importe,
    fld_VidaUtil, fld_ValorResidual, fld_Seccion, fld_Localizacion, fld_Rubro,
    fld_Amortizacion, fld_FechaBaja);

    static void inhabilitaPegar(JComponent… campos) {
    for (JComponent campo : campos){
    InputMap map = campo.getInputMap();
    map.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.CTRL_MASK), “null”);
    map.put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, Event.SHIFT_MASK), “null”);
    }
    }

  2. Rodnier dijo:

    Muchas gracias, por este post, me salvo la vida
    Buenas haciendo un pequeño aporte

    forma de uso:
    inhabilitaPegar(jPanelContenedor);

    private void inhabilitaPegar(Container contenedor)
    {
    Component [] componentes = contenedor.getComponents();

    for (int i = 0; i < componentes.length; i++) {
    if (componentes [i] instanceof JTextField)
    {
    InputMap map = ((JTextField)componentes[i]).getInputMap();
    map.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.CTRL_MASK), "null");
    map.put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, Event.SHIFT_MASK), "null");
    }
    else
    if (componentes [i] instanceof Container)
    inhabilitaPegar((Container)componentes [i]);

    }
    }
    saludos

  3. Deiber dijo:

    Detallando este post me salta una duda que diferencia hay entre colocar (… y [ ]) en el argumento de un metodo, y como funciona este siclo ( for (JComponent campo : campos) ) les agradezco su explicación soy novato y no me gusta comer entero..

    • jaehoo dijo:

      Es una forma abreviada para ejecutar el for en Java, el for lo único que hace es colocar cada elemento de la variable campos en un objeto llamado campo, al finalizar la iteración continua con el siguiente elemento hasta temrinar la lista.

      Este y otros detalles más podrias aprenderlos leyendo sobre la certificación en Java. Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s