2011-09-01 9 views
8

Tengo un jFormattedTextField en mi programa y necesito actualizar el texto de jLabel cuando el valor de jFormattedTextField se ha modificado de forma válida.
En realidad, jFormattedTextField obtiene un número y jLabel muestra la diferencia entre este número y otro.
Actualmente hago esto escuchando el evento "FocusLost" de texto jFormatted.poniendo escucha "On Change" en jFormattedTextField

¿Cómo puedo hacer esto?

Respuesta

10

registrar un PropertyChangeListener por el "valor" alojamiento hasta el formattedField

PropertyChangeListener l = new PropertyChangeListener() { 

     @Override 
     public void propertyChange(PropertyChangeEvent evt) { 
      String text = evt.getNewValue() != null ? evt.getNewValue().toString() : ""; 
      label.setText(evt.getNewValue()); 
     } 
    }; 
    formattedTextField.addPropertyChangeListener("value", l); 

No utilice DocumentListener ni FocusListener: el primero se notificó con demasiada frecuencia (en cada keyTyped, antes de que ocurriera el análisis sintáctico) que el segundo es demasiado frágil .

1

Probablemente la forma más fácil de hacer esto es usar un javax.swing.event.DocumentListener que adjunte al campo de texto. Luego, a medida que el usuario escribe, la etiqueta se puede actualizar.

No recuerdo la secuencia exacta, pero se puede llamar al insertUpdate() del oyente antes de que se valide el campo de texto formateado. Por lo tanto, es posible que también deba verificar los números válidos en su oyente.