Leyendo constantemente una cadena de JTextField
-
28-10-2019 - |
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?
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.