The::Beastieux

Sangre de Bestia + Corazón de Pingüino | Un blog acerca de Linux, *BSD, Open Source, Software Libre, Programación …

Código Java – Evento de Cambio de Texto en JTextField


Este es el Ejemplo #07 del Topic: Programación Gráfica en Java.

Generalmente las IDE’s de desarrollo en Java no traen incluidos el evento de cambio de texto en las cajas de entrada, por lo menos los que he usado no los tienen, ni Netbeans que es mi preferida tampoco lo trae, debido a eso para lograr tal efecto vamos a implementar una función JTexFieldChanged haciendo uso de DocumentEvent y DocumentListener del que derivarán los eventos deseados:

...
    private void setJTexFieldChanged(JTextField txt)
    {
        DocumentListener documentListener = new DocumentListener() {

        @Override
        public void changedUpdate(DocumentEvent documentEvent) {
            printIt(documentEvent);
        }

        @Override
        public void insertUpdate(DocumentEvent documentEvent) {
            printIt(documentEvent);
        }

        @Override
        public void removeUpdate(DocumentEvent documentEvent) {
            printIt(documentEvent);
        }
        };
        txt.getDocument().addDocumentListener(documentListener);

    }

    private void printIt(DocumentEvent documentEvent) {
        DocumentEvent.EventType type = documentEvent.getType();

        if (type.equals(DocumentEvent.EventType.CHANGE))
        {

        }
        else if (type.equals(DocumentEvent.EventType.INSERT))
        {
           //Método a ejecutar
        }
        else if (type.equals(DocumentEvent.EventType.REMOVE))
        {
            //Método a ejecutar
        }
    }
...

Código de Ejemplo:

package beastieux.gui;

import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

/**
 *
 * @author beastieux
 */
public class Ejm07_EventoTextFieldChanged extends JFrame{

    private JTextField txtEjemplo;
    private JLabel lblEjemplo;

    public Ejm07_EventoTextFieldChanged()
    {
        txtEjemplo=new JTextField();
        lblEjemplo=new JLabel();
        this.add(txtEjemplo);
        this.add(lblEjemplo);
        this.setLayout(new GridLayout(1,1));
        this.setSize(400, 80);

        setJTexFieldChanged(txtEjemplo);
    }

    private void setJTexFieldChanged(JTextField txt)
    {
        DocumentListener documentListener = new DocumentListener() {

        @Override
        public void changedUpdate(DocumentEvent documentEvent) {
            printIt(documentEvent);
        }

        @Override
        public void insertUpdate(DocumentEvent documentEvent) {
            printIt(documentEvent);
        }

        @Override
        public void removeUpdate(DocumentEvent documentEvent) {
            printIt(documentEvent);
        }
        };
        txt.getDocument().addDocumentListener(documentListener);

    }

    private void printIt(DocumentEvent documentEvent) {
        DocumentEvent.EventType type = documentEvent.getType();

        if (type.equals(DocumentEvent.EventType.CHANGE))
        {

        }
        else if (type.equals(DocumentEvent.EventType.INSERT))
        {
            txtEjemploJTextFieldChanged();
        }
        else if (type.equals(DocumentEvent.EventType.REMOVE))
        {
            txtEjemploJTextFieldChanged();
        }
    }

    private void txtEjemploJTextFieldChanged()
    {
        //Copiar el contenido del jtextfield al jlabel
        this.lblEjemplo.setText(this.txtEjemplo.getText());
    }

    public static void main(String args[]) {
        Ejm07_EventoTextFieldChanged obj = new Ejm07_EventoTextFieldChanged();
        obj.setVisible(true);
    }
}
Anuncios

5 Respuestas a “Código Java – Evento de Cambio de Texto en JTextField

  1. Polle0 enero 16, 2016 en 9:24 am

    Hola Muchachis, despues de varias horas de busqueda para encontrar una forma practica y poco boluminosa para detectar el cambio de texto en un jLabel (java) me encontre con la ultima citacion de un colega en la Web: http://www.coderanch.com/t/346037/GUI/java/detect-change.
    El codigo es mas o menos asi:

    jLabel_1.addPropertyChangeListener(“text”, new PropertyChangeListener() {
    //Donde “text” no es mas que un parametro, no está referido al texto del jLabel.

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
    //Codiogo necesario.
    }
    });

    En mi caso particular, lo plantee de la siguiente forma:
    jLabel_1.addPropertyChangeListener(“text”, new PropertyChangeListener() {

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
    if(bandera == false){
    bandera = true;
    jLabel_1.setText( jLabel_.getText() + ” Texto que deseo agregar ” );
    }
    else
    bandera = false;
    }
    });
    Explicacion:
    Debido a que es un evento, como una interrupcion, decidi utilizar una bandera para que no se genere un bucle infinito de deteccion de cambio de texto.
    Debido a que mi objetivo fue que al detectar un cambio en el texto de jLabel, le agregase el texto deseado al final. Entonces, si por defecto la bandera es false; cuando la rutina que modifica el texto lo hace, se detona el evento, se pone en true la bandera y luego se modifica el texto del jLabel, detonandose el evento nuevamente, pero como encuentra a la bandera en true, solo la pone en false y se termina el bucle.

    Saludos y espero que a alguien le sirva!

  2. jesus julio 19, 2014 en 7:41 pm

    Muchas GRACIAS REALLY …. gracias ….

  3. Carlos Sanchez mayo 10, 2014 en 6:01 pm

    Yo tengo mas de un JtextField … como podria detectar si uso la funcion con mas de un jTextField como se cual JTextFiel se cambio el contenido

    POr ejemplo

    setJTexFieldChanged(txtCodigo);
    setJTexFieldChanged(txtNombre);
    setJTexFieldChanged(txtDescripcion);

    COmo se cual es el que cambio

  4. Sebas mayo 10, 2013 en 12:38 pm

    Muchas Gracias, me sirvió mucho, Excelente ayuda.

  5. Anónimo julio 11, 2012 en 2:46 pm

    Supongamos que ya le puse el DocumentListener pero ahora surge la necesidad de remover tal evento al campo de texto en plena ejecución, cual sería el codiogo para remover?…. alguíen me puede ayudar… gracias

No te quedes callado. Pregunta, Comenta, Comparte, Sígueme, Suscríbete, Déjame tu opinión... Soy Beastieux Zeroo...

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

A %d blogueros les gusta esto: