Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/07/2016, 10:35
ls_52
 
Fecha de Ingreso: noviembre-2015
Mensajes: 23
Antigüedad: 8 años, 5 meses
Puntos: 0
Filtros en JavaSE

Hola a todos. Ya hacia un tiempo que no pasaba por aquí :P
Hoy tengo una cuestion de novato y aunque ya llevo mucho tiempo con Java, se me ha presentado un problema que no puedo resolver.

El problema es el siguiente:

Hacía ya un tiempo que tenía un pedazo de código en Java que copiaba el contenido de un JText a otro en tiempo real, incluso se contemplaba el borrado y la modificación del texto. Nada complicado, pero se me ocurrio actualizar ese código y hacer un filtro sencillo.
Como ya se verá en el código, estoy haciendo un filtro muy primitivo pero ya es trabajo mío trasladar este problema a casos más complejos.
El caso es que uso un indexOf() para ver si el string que estoy introduciendo coincide total o parcialmente con el contenido correcto y funciona bien si actualizo o si introduzco un caracter que no corresponde con el texto correcto pero el problema es que si borro, aunque lo que quede sea correcto, me lo marca como incorrecto. Me explico con un ejemplo y el codigo:

Código:
package nuevo;

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;
 

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);
        lblEjemplo.setText("María Antonieta");
 
        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))
        {
        	txtEjemploJTextFieldChanged();
        }
        else if (type.equals(DocumentEvent.EventType.INSERT))
        {
            txtEjemploJTextFieldChanged();
        }
        else if (type.equals(DocumentEvent.EventType.REMOVE))
        {
            txtEjemploJTextFieldChanged();
        }
    }
 
    private void txtEjemploJTextFieldChanged()
    {
        
    	System.out.println(txtEjemplo.getText());
    	System.out.println(lblEjemplo.getText().indexOf(txtEjemplo.getText()));
    	if(lblEjemplo.getText().indexOf(txtEjemplo.getText()) == -1){
    		lblEjemplo.setText("");
    	}else{
    		lblEjemplo.setText("María Antonieta");
    	}
        //this.lblEjemplo.setText(this.txtEjemplo.getText());
    	
    }
 
    public static void main(String args[]) {
        Ejm07_EventoTextFieldChanged obj = new Ejm07_EventoTextFieldChanged();
        obj.setVisible(true);
    }
}
Si introduzco la "M", la salida es 0, lo que indica que encontro coincidencia.
Si introduzco una 'a' junto a la M anterior, es decir "Ma" la salida es 0.
Si introduzco una 'j' junto a lo de antes, osea, "Maj", la salida es -1 y el texto se borra.
Hasta ahi bien, pero si borro esa 'j', vuelve a quedar "Ma" pero el programa vuelve a dar salida -1 y no entiendo por que...
Alguna ayuda?
Gracias por tormarse la molestia :)