2010-10-15 23 views
9

In che modo è possibile riattivare l'evento su una JLabel quando si modifica il testo all'interno ??JLabel sull'evento di modifica del testo

Ho una JLabel e quando cambio il testo all'interno devo aggiornare altro campo.

+1

Sarebbe meglio aggiornare entrambi i campi contemporaneamente, da qualunque evento ha causato il primo cambiamento? –

+0

Inserisco un testo in jlabel1 con un clic su un pulsante e in base a ciò che ho scelto devo inserire un altro testo in jLabel2 – Giovanni

risposta

2

IMHO non è possibile ottenere un evento su JLabels textchange. Ma è possibile utilizzare un JTextField invece di 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: questo evento viene generato non importa quanto il testo viene cambiato; programmaticamente tramite "setText()" sul TextField o (se non si "setEditable (false)") tramite appunti taglia/incolla, o dall'utente che digita direttamente nel campo sull'interfaccia utente.

Le linee:

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

sono usati per fare il JTextField sembrare un JLabel.

+0

questa risposta è errata (la parte relativa agli ascoltatori disponibili per JLabel) – kleopatra

10

techically, la risposta è quella di utilizzare un PropertyChangeListener e ascoltare cambiamenti del "testo" di proprietà, qualcosa come

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

quindi tecnicamente: potrebbe essere la pena di ri-visitare il disegno complessivo e legarsi a fonte originale che ha attivato la modifica dell'etichetta