Pregunta

Tengo un DocumentListener para buscar cambios en JTextField:

public class MyDocumentListener implements DocumentListener {

    static String text;

    public void insertUpdate(DocumentEvent e) {
        updateLog(e);
    }
    public void removeUpdate(DocumentEvent e) {
        updateLog(e);
    }
    public void changedUpdate(DocumentEvent e) {
        //Plain text components do not fire these events
    }

    public static String passText() {
        System.out.println("string that will be passed is: "+text);
        return text;
    }

    public void updateLog(DocumentEvent e) {

        Document doc = (Document)e.getDocument();
        int length = e.getLength();

        try {
            text = doc.getText(0, length);
        } catch (BadLocationException e1) {
            e1.printStackTrace();
        }
        System.out.println("you typed "+text);  
    }
}

Y luego, en la otra clase:

String info = MyDocumentListener.passText();

El problema es que obtengo solo un carácter, en lugar de toda la Cadena.¿Alguna sugerencia?

¿Fue útil?

Solución

Obtiene la longitud del cambio en lugar de la longitud del documento :

int length = e.getLength(); // probably 1

debería ser

int length = doc.getLength();

Otros consejos

La respuesta proporcionada por paislee es correcta.Le gustaría agregar otra forma de hacer lo mismo.Puede usar bindings, que agrega el concepto de ValueHolders, variables que almacenarán y reflejarán inmediatamente cualquier cambio de propiedad de sus componentes gráficos.Puede proporcionar una forma muy eficaz de implementar el patrón de diseño MVC con Swing ya que la comunicación entre Modelo-Controlador-Vista es mucho más afectiva y desacoplada.

JGoodies tiene una implementación excelente y de código abierto para él.Si puede dedicar algo de tiempo y desea mejorar su diseño, no dude en echar un vistazo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top