Newsgroup: it.comp.java
Titolo: Ordine temporale degli eventi in Swing

Salve a tutti,
ho un problema nel gestire la corretta sequenza degli eventi scatenati
dalle azioni dell'utente sulla mia GUI.
Ho una semplice JDialog (custom) su cui ci sono un JtextField e/o una
jtable e un pulsante.
Mi posiziono sul textbox e poi premo il pulsante
Ho notato che talvolta (sempre?) l'evento actionPerformed associato
alla pressione del pulsante viene scatenato prima del lostFocus del
textbox.
Oppure
Modifico il contenuto di una cella della tabella e poi premo il
pulsante (senza prima essere uscito dalla cella).
Anche in questo caso l'evento actionPerformed del pulsante avviene
prima che l'edit della cella sia concluso e quindi nel mio gestore mi
ritrovo il contenuto della table senza ancora il valore modificato.
Mi pare un comportamento strano ed evidentemente sbaglio qualcosa.
Qualcuno sa spiegarmi il perché e/o come risolvere?
Grazie
Ciao
John


Può dipendere dal fatto che la mia finestra eredita da una classe base
e che alcuni eventi (il lostfocus) sono gestiti sulla classe base
mentre altri (click del pulsante) sono gestiti direttamente sulla
classe della finestra?
John

 classe della finestra?
No, dipende dal fatto che gli eventi appartengono a thread separate.
Se ti serve che il tasto possa essere clikkato solo alla fine dell'edit, 
potresti condizionare la proprieata' enable del tasto con lo stato del 
campo, oppure modificare lo stato del campo mediante l'action del tasto.
-- 
Dr.Ugo Gagliardelli,Modena,ItalyCertifiedUindoscrasherAñejoAlcoolInside
Spaccamaroni andate a cagare/Spammers not welcome/Spammers vão à merda
Spamers iros a la mierda/Spamers allez vous faire foutre/Spammers loop
schijten/Spammers macht Euch vom Acker/Spamerzy wypierdalac'

On 12 Gen, 11:47, "Dr.UgoGagliardelli"

Mah, forse non mi sono spiegato correttamente.
Temporalmente la successione degli eventi dell'utente è questa:
- click nel textbox
- modifica contenuto del textbox
- click sul pulsante contenuto nella stessa finestra
La sequenza degli eventi invece è questa
- GotFocus del textbox
- TextChanged del textbox
- actionperformed del button -> tra le altre cose chiudo la finestra
- LostFocus del textbox
Se è corretta questa sequenza di eventi (mi pare proprio strano) mi
perdo il mio gestore del lostfocus del textbox (che deve andare ad
aggiornare il model  sottostante l'interfaccia grafica) e quindi in
sostanza mi perdo le modifiche effettuate dall'utente.
Ciao
John

 John


 vedresti il il text box che perde il focus.
No perchè? nella mia sequenza l'utente clicca sul pulsante, non ci
passa semplicemente sopra.
Io davo per scontato che un click su un pulsante facesse perdere il
focus ad un textbox.
Il problema è che l'aggiornamento del mio modello dati sottostante la
finestra è tutto legato alla perdita
del focus dei campi.
Dovrei forzare la perdita del focus prima di gestire il click del
pulsante ma come faccio a sapere quando il lostfocus è avvenuto ed è
stato gestito completamente?
Ciao
John

 stato gestito completamente?
A rigor di logica, direi che prima dell'evento focusGained, venga 
scatenato e consumato l'evento focusLost del componente che attualmente 
  ha il focus.
Anche se dal java-doc si legge:
Developers must never assume that this Component is the focus owner 
until this Component receives a FOCUS_GAINED event
per cui, per rispettare il contratto, nell'actionPerformed dovresti solo 
prendere il focus, e nel focusListener.focusGained del JButton dovresti 
fare quello che fai ora nell' actionPerformed.
Cio' che fai nel focusListener.focusLost del text box dovrebbe essere 
sincrono.
