2010-10-15 9 views
9

¿Cómo puedo recuperar el evento en un JLabel cuando cambio el texto en el interior?JLabel al cambiar el evento de texto

Tengo un JLabel y cuando cambie el texto dentro tengo que actualizar otro campo.

+1

¿Sería mejor actualizar ambos campos a la vez, de cualquier evento que haya causado el cambio de los primeros? –

+0

Pongo un texto i jlabel1 con un clic en un botón y dependiendo de lo que he elegido tengo que poner otro texto en un jLabel2 – Giovanni

Respuesta

2

En mi humilde opinión no puede obtener un evento en JLabels textchange. Sin embargo, se puede utilizar un JTextField en lugar de un JLabel:

private JTextField textFieldLabel = new JTextField(); 
textFieldLabel.setEditable(false); 
textFieldLabel.setOpaque(true); 
textFieldLabel.setBorder(null); 

textFieldLabel.getDocument().addDocumentListener(new DocumentListener() { 

    public void removeUpdate(DocumentEvent e) { 
     System.out.println("removeUpdate"); 
    } 

    public void insertUpdate(DocumentEvent e) { 
     System.out.println("insertUpdate"); 
    } 

    public void changedUpdate(DocumentEvent e) { 
     System.out.println("changedUpdate"); 
    } 
}); 

Nota: Este evento se activa sin importar cómo el texto se cambia; programáticamente a través de "setText()" en el TextField o (si no lo hace "setEditable (false)") a través del portapapeles cortar/pegar, o por el usuario escribiendo directamente en el campo en la interfaz de usuario.

Las líneas:

textFieldLabel.setEditable(false); 
textFieldLabel.setOpaque(true); 
textFieldLabel.setBorder(null); 

se utilizan para hacer el JTextField parezca un JLabel.

+0

esta respuesta es incorrecta (la parte relacionada con los oyentes disponibles para JLabel) – kleopatra

10

techically, la respuesta es utilizar un PropertyChangeListener y escuchar a los cambios de la propiedad "Texto", algo así como

PropertyChangeListener l = new PropertyChangeListener() { 
     public void propertyChanged(PropertyChangeEvent e) { 
      // do stuff here 
     } 
}; 
label.addPropertyChangeListener("text", l); 
no

por lo que técnicamente: podría valer la pena volver a visitar el diseño general y se unen a origen original que activó el cambio en la etiqueta

Cuestiones relacionadas